【发布时间】:2016-06-14 18:53:04
【问题描述】:
我正在使用带有自定义 Lucene 索引和 Linq 的 Sitecore 7.2。我需要为完全匹配赋予额外的(最大)权重。
示例: 用户搜索“彩虹上的某处”
结果应包括包含“rainbow”一词的项目,但包含“somewhere over the rainbow”的确切和完整术语的项目应给予最大权重。它们将作为最佳结果显示给用户。即包含整个短语的项目应比包含“彩虹”一词的项目重 100 倍。
我可能需要通过将“短语匹配”与“通配符匹配”分开收集来处理 ContentSearch API 之外的排名逻辑,这很好。
这是我现有的代码,为简洁起见已截断。该代码有效,但不按照我的描述处理完全匹配的短语。
using (var context = ContentSearchManager.GetIndex("sitesearch-index").CreateSearchContext())
{
var pred = PredicateBuilder.False<SearchResultItem>();
pred = pred
.Or(i => i.Name.Contains(term)).Boost(1)
.Or(i => i["Field 1"].Contains(term)).Boost(3)
.Or(i => i["Field 2"].Contains(term)).Boost(1);
IQueryable<SearchResultItem> query = context.GetQueryable<SearchResultItem>().Where(pred);
var hits = query.GetResults().Hits;
...
}
如何执行精确的词组匹配?是否可以使用 Sitecore.ContentSearch.Linq API?
【问题讨论】:
-
尝试查看 PreparedQuery 而不是 PredicateBuilder 的使用情况。
-
看起来 PreparedQuery 来自 Sitecore 6 中的 Sitecore.Search API,而不是 7 中的 ContentSearch API。我当前的自定义索引是在
节点下的独立配置文件中定义的。 SearchManager.GetIndex()(在 v6 中使用)不知道我的索引。看来我必须更改所有内容才能使用 v6 API。希望有替代方案。