Sitecore索引搜索

时间:2015-10-20 00:27:58

标签: search lucene 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 个答案:

答案 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排序。得分的主要影响因素是该术语在文档中出现的次数。

引用the Lucene website

  

一般来说,VSM(矢量空间建模)背后的想法是   查询字词出现在相对于数字的文档中的次数   该术语出现在集合中的所有文档中的时间   该文档与查询更相关。