与Sitecore ContentSearch API匹配的词组

时间:2016-06-14 18:53:04

标签: linq lucene sitecore

我正在使用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执行精确的词组匹配?

2 个答案:

答案 0 :(得分:0)

我认为如果您执行以下操作,它将解决此问题:

  • 在空间中拆分搜索字符串
  • 使用相等的提升值为每个拆分创建谓词
  • 使用完整的搜索字符串创建其他谓词 具有更高的推动值
  • 将所有这些谓词组合在一个&#34; OR&#34;谓词。

我还建议您检查以下内容:

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)

没有观察到提升。