我正在根据输入的关键字构建一个sitecore索引搜索及其返回结果。是否有办法让我知道哪个项目具有该关键字的最高匹配,并可以使用这些匹配进行排序?
var index = ContentSearchManager.GetIndex("passport_index");
using (var context = index.CreateSearchContext())
{
var predicate = PredicateBuilder.True<SearchResultItem>();
foreach (var t in baseQuery.Split(' '))
{
var tempTerm = t;
predicate = predicate.Or(p => p.Content.Contains(tempTerm));
}
}
最佳答案
正如马丁所说-默认情况下,分数将按降序排列。但是,您也可以使用GetResults
扩展方法获得分数值。
在您的示例中,您将执行以下操作:
var index = ContentSearchManager.GetIndex("passport_index");
using (var context = index.CreateSearchContext())
{
var predicate = PredicateBuilder.True<SearchResultItem>();
foreach (var t in baseQuery.Split(' '))
{
var tempTerm = t;
predicate = predicate.Or(p => p.Content.Contains(tempTerm));
}
var query = context.GetQueryable<SearchResultItem>().Where(predicate);
var results = query.GetResults();
// Get total results
var total = results.TotalSearchResults;
var hits = results.Hits.OrderByDescending(x => x.Score).Select(x => x.Document);
}
results.Hits
返回一个IEnumerable<SearchHit<SearchResultItem>>
-SearchHit
包含一个文档,即结果和一个分数,该分数是一个浮点数,其中包含该文档的相关性分数。关于search - Sitecore索引搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33226089/