Sitecore Solr搜索结果项匹配计数

时间:2015-09-17 07:27:31

标签: solr sitecore

我使用Sitecore Solr搜索使用关键字字符串进行搜索,是否有办法知道每个返回结果项的匹配数?

以下是我正在使用的代码:

using (var context = Index.CreateSearchContext())
{
     List<Item> ResultList = new List<Item>();

     var contentPredicate = PredicateBuilder.True<customSearchResultItem>();
     contentPredicate = contentPredicate.And(p => p.Content.Contains(SearchKey));
     contentPredicate = contentPredicate.And(p => p.Name != "__Standard Values");

     var languagePredicate = PredicateBuilder.True<customSearchResultItem>();
     languagePredicate = languagePredicate.And(p => p.Language == Context.Language.Name);

     var CombinPredicates = PredicateBuilder.True<customSearchResultItem>();
     CombinPredicates = CombinPredicates.And(languagePredicate);
     CombinPredicates = CombinPredicates.And(contentPredicate);

     // execute the search
     IQueryable<customSearchResultItem> query = context.GetQueryable<customSearchResultItem>().Where(CombinPredicates);
     var hits = query.GetResults().Hits;
}

2 个答案:

答案 0 :(得分:1)

据我所知,您无法根据用于搜索的关键字获取每个结果项的匹配数。您可以获得的是Solr的得分值。

var hits = query.GetResults().Hits;
foreach (var hit in hits)
{
    var score = hit.Score;
}

这是整个查询的值,因此它包含所有谓词,例如languagenot Standard Valueskeywords

请记住,如果您使用Solr并且使用Lucene,则此值可能会有所不同 - 这取决于内部计算。

答案 1 :(得分:0)

我通过向每个谓词添加提升值来解决这个问题,然后对每个结果项我得到得分并将其除以.59,在我的情况下,当所有谓词都被收集时发生的最大值;详细代码可以在以下博客文章中找到:

http://sitecoreinfo.blogspot.com/2015/10/sitecore-solr-search-result-items.html