与Sitecore ContentSearch API匹配的词组

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执行精确的词组匹配?

bet*_*all 1

回答我自己的问题。问题出在括号语法上。它应该是

.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)

没有观察到这种提升。