对于某个模板的项目,我们的用户可以指示该项目应该显示在列表的顶部。
为此,我们在索引“ShowOnTop”中添加了一个字段。
现在,当搜索此模板的项目(以构建列表页面)时,我们希望这些“ShowOnTop”项目有效地返回到其他项目之上。
但是,此字段不应影响其他站点搜索(一般搜索)。
我们认为这可以通过对这些文档应用 Query-Time Boosting 来实现。但是,我们怎样才能做到这一点呢?
要在查询时进行提升,只需使用 Boost(value) 方法(使用搜索谓词,因为听起来您可能正在做一些高级搜索,增加谓词的灵活性可能会派上用场) -
var queryPredicate = PredicateBuilder.True<SearchResult>();
queryPredicate = queryPredicate.And(i =>
i.Headline.Contains(model.Query).Boost(50));
可能最好的方法是应用基于该字段的排序,类似于:
Sort sort = new Sort(new SortField("ShowOnTop", SortField.STRING, true), true);
var hits = new SearchHits(context.Searcher.Search(query, sort));
您还可以将其添加为一个大大提升的可选查询术语,类似于以下内容,并使查询的其余部分(作为一个整体)是必需的,例如:
ShowOnTop:true^10000 +(the rest of the query)
有了足够大的提升因子,除非相关性有很大差异,否则这些术语应该总是首先出现。
最简单的是在 ShowOnTop 字段上的过滤器下创建一个规则/sitecore/system/Settings/Rules/Indexing and Search/...
(我使用了一个复选框并将值与 进行比较1
)并将提升调整为 99999999
您可以将此规则添加为全局规则,也可以将其添加为项目规则并从项目内分配规则。
祝你好运!