bet*_*all 9 linq lucene sitecore
我使用Sitecore 7.2与自定义Lucene索引和Linq.我需要给精确匹配额外的(最大)重量.
示例:用户搜索"彩虹上的某个地方"
结果应该包括含有"彩虹"一词的项目,但是包含精确和完整术语"彩虹上某处"的项目应该给予最大权重.它们将作为最佳结果显示给用户.即包含整个短语的项目应比包含"彩虹"一词的项目重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;
...
}
Run Code Online (Sandbox Code Playgroud)
如何使用Sitecore.ContentSearch.Linq API执行精确的词组匹配?
回答我自己的问题。问题出在括号语法上。它应该是
.Or(i => i.Name.Contains(term).Boost(1))
Run Code Online (Sandbox Code Playgroud)
而不是
.Or(i => i.Name.Contains(term)).Boost(1)
Run Code Online (Sandbox Code Playgroud)
没有观察到这种提升。
| 归档时间: |
|
| 查看次数: |
895 次 |
| 最近记录: |