2015-10-20 196 views
2

我正在构建一个sitecore索引搜索,并根据我输入的关键字返回结果。是否有一种方法可以知道哪个项目的关键字点击最多,并且可以使用这些匹配进行排序?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)); 
    } 
} 

回答

2

这是默认行为,所以您不需要应用排序。

结果按score排序。导致评分的主要因素是该术语在文档中出现的次数。

引述the Lucene website

在一般情况下,后面的VSM(向量空间模型)的想法是 多次查询检索词出现在相对的时间期限出现在数 文档集合中的所有文档, 与该文档更相关的查询。

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包含一个文件,这是结果和比分,这是一个包含关联得分为文档的浮动。