1

我正在尝试使用检查流利的 api 编写脚本。

我有我需要满足的条件

  • search 必须找到以 searchTerm 开头的节点
  • search 必须找到包含 searchTerm 的节点
  • search 必须找到以 searchTerm 结尾的节点
  • 搜索必须支持多个词
  • 搜索不得因 & * ` 和其他字符而失败

我只能匹配以这个字符串开头的单词。

当我执行下面的代码时,我只得到以 searchTerm 开头的单词

   public IEnumerable<SearchResultItem> Search(string searchTerm)
        {
           //Create search Criteria
            var sc = ExamineManager.Instance.CreateSearchCriteria();

            //define query
            var query = sc.NodeName(searchTerm.MultipleCharacterWildcard())
                        .Or()
                        .Field("content", searchTerm.MultipleCharacterWildcard())
                        .Compile();


            var results = ExamineManager.Instance.SearchProviderCollection["ContentSearcher"].Search(query);                

            return results.OrderBy(x => x.Score).Select(MapSearchResults);
        }

如何更新所有条件的搜索脚本?

4

1 回答 1

1

原始查询的解决方案。这应该悬停搜索必须找到以searchTerm 开头的节点搜索必须找到包含searchTerm 的节点搜索必须找到以searchTerm 结尾的节点搜索必须支持多个单词

  var searchTerm = Request["term"].Split(new char[0], StringSplitOptions.RemoveEmptyEntries);
    var searcher = ExamineManager.Instance.SearchProviderCollection["ExternalSearcher"];
          var searchCriteria = searcher.CreateSearchCriteria();
          var luceneString = new System.Text.StringBuilder();
          luceneString.Append("nodeTypeAlias:");

          luceneString.Append("*");

          for (int i = 0; i < searchTerm.Length; i++)
          {

              luceneString.Append(" AND ");

              luceneString.Append("title:");
              luceneString.Append("*");
              luceneString.Append(searchTerm[i]);
              luceneString.Append("*");
          }

          var query = searchCriteria.RawQuery(luceneString.ToString());
          var searchResults = searcher.Search(query);

这篇文章帮助了我http://www.lucenetutorial.com/lucene-query-syntax.html

于 2014-11-22T22:36:05.747 回答