我正在使用Sitecore 7.2和自定义Lucene索引和Linq。我需要为完全匹配提供额外的(最大)重量。
实施例: 用户在彩虹的某个地方搜索"
结果应该包含含有" rainbow"这个词的项目,但是包含完整和完整术语的项目"在彩虹的某个地方"应该给予最大的重量。它们将作为最佳结果显示给用户。即包含整个短语的项目应该比包含单词" 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执行精确的词组匹配?
答案 0 :(得分:0)
我认为如果您执行以下操作,它将解决此问题:
我还建议您检查以下内容:
Sitecore Solr Search Score Value
http://sitecoreinfo.blogspot.com/2015/10/sitecore-solr-search-result-items.html
答案 1 :(得分:0)
回答我自己的问题。问题在于括号语法。它应该是
.Or(i => i.Name.Contains(term).Boost(1))
而不是
.Or(i => i.Name.Contains(term)).Boost(1)
没有观察到提升。