我在搜索时使用以下代码搜索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;
}
}
}
答案 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));
}
}