如何在sitecore 6.5中添加标准分析器,以便不忽略停用词

时间:2015-04-08 02:12:32

标签: c# sitecore lucene.net

我在搜索时使用以下代码搜索1.example:London的所有关键字      2.example:伦敦桥

但是当我搜索

example3:在伦敦桥

它不会返回任何结果。而且我的分数也没有排序。在这里,我只在标题中进行搜索并尝试按分数排序(从最高到最低)

以下是我的代码,只在标题中进行搜索并尝试按分数排序(从最高到最低)

public SearchResultCollection Search(string searchString, string ProgramCampusStage, out  Hits hitScores)
    {
         var searchIndex=Sitecore.Search.SearchManager.GetIndex(SearchIndexName);
        using (IndexSearchContext context = searchIndex.CreateSearchContext())
        {

          // get the search term
           string searchterm = searchString.ToLower().Trim();


        PhraseQuery completeQuery = new PhraseQuery();
        completeQuery.SetSlop(4);

        foreach (var s in searchterm.Split(' '))
        {
            completeQuery.Add(new Term("title", s));
        }


        hitScores = context.Searcher.Search(completeQuery, new Sort(new SortField[1] { SortField.FIELD_SCORE }));
        SearchHits hits = new SearchHits(hitScores);
        var results = hits.FetchResults(0, Int32.MaxValue);

           foreach (var result in results)
            {
                try
                {
                    Item item = result.GetObject<Item>();
                    bool isAuthorized = UserUtility.IsUserAuthorized(item, ProgramCampusStage);
                    if (isAuthorized)
                    {
                        if (item != null)
                        {
                            string categoryName = GetCategoryName(item);

                            if (item.Language.Name != Context.Language.Name || categoryName == string.Empty)
                            {
                                continue;
                            }

                            results.AddResultToCategory(result, categoryName);
                        }
                        else
                        {
                            results.AddResultToCategory(result, OtherCategory);
                        }
                    }
                }
                catch
                {
                    continue;
                }
            }
            return _searchResults = results;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以尝试在构建查询时过滤掉停用词,而不是在索引中添加停用词作为术语(这可能会导致其他令人头疼的问题,例如过多的条款和例外情况): / p>

foreach (var s in searchterm.Split(' '))
{
  if (!Lucene.Net.Analysis.Standard.StandardAnalyzer.STOP_WORDS_SET.Contains(s))
  {
     completeQuery.Add(new Term("title", s));
  }
}
相关问题