我正在根据输入的关键字构建一个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/

10-11 01:00