我正在构建一个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));
}
}
答案 0 :(得分:3)
正如马丁所说 - 默认情况下,它将按分数降序排序。但您也可以使用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
包含一个文档,这是一个结果和一个分数,它是一个包含文档相关性分数的浮点数。
答案 1 :(得分:2)
这是默认行为,因此您不需要应用排序。
结果按其score
排序。得分的主要影响因素是该术语在文档中出现的次数。
一般来说,VSM(矢量空间建模)背后的想法是 查询字词出现在相对于数字的文档中的次数 该术语出现在集合中的所有文档中的时间 该文档与查询更相关。