使用整个单词在新的Sitecore ContentSearch中搜索

时间:2014-04-11 20:13:31

标签: search lucene sitecore

我正在使用新的Sitecore搜索,我遇到的问题是搜索结果与我的搜索字词无关。

例如,搜索“谎言”会找到“适用”。这不是我想要的。

这是我正在进行的搜索示例(简化)。它是对SearchResultItem的“Content”属性的“Contains”的直接LINQ检查,很可能不是我应该做的。我恰巧在网上找到的样本实际上是这样做的。

我的代码示例(简化)。在这里,我将搜索句分解为单独的关键字。顺便说一句,我正在寻找一种方法来首先显示完整的句子匹配。

        using (var context = ContentSearchManager.GetIndex("sitecore_web_index").CreateSearchContext())
        {
            var results = context.GetQueryable<SearchResultItem>()
                .Filter(i => i.Path.StartsWith(Home.Paths.FullPath))
                .Filter(GetTermPredicate(Term));

           // use results here
        }



    protected Expression<Func<SearchResultItem, bool>> GetTermPredicate(string term)
    {
        var predicate = PredicateBuilder.True<SearchResultItem>();
        foreach (var tempTerm in term.Split(' '))
        {
            predicate = predicate.And(p => p.Content.Contains(tempTerm));
        }
        return predicate;
    }

提前谢谢!!

4 个答案:

答案 0 :(得分:1)

将代码中的Filter替换为Where,它应该没问题, 这是一个例子:

    var currentIndex = ContentSearchManager.GetIndex("sitecore_web_index"); 
using (var context = currentIndex.CreateSearchContext()) 
{ 
  var predicate = PredicateBuilder.True(); 
  foreach (var currentWord in term.Split(‘ ‘)) 
  { 
      predicate = predicate.Or(x => x.Content.Contains(currentWord )); 
  } 
  var results = context.GetQueryable().Where(predicate).GetResults(); 
}

答案 1 :(得分:1)

好的。我得到了Sitecore支持的帮助。

在我的Sitecore版本中,我可以使用以下内容来搜索整个字而不是部分字词:

而不是:

  

predicate = predicate.And(p =&gt; p.Content。包含(tempTerm));

使用

  

predicate = predicate.And(p =&gt; p.Content。 Equals (tempTerm));

问题已解决。

答案 2 :(得分:0)

正如Ahmed所说,你应该使用 Where 而不是过滤器,因为过滤器对搜索排名没有影响。过滤器的经典用例是应用用户选择的方面而不会扭曲结果的排序,如果您使用Where子句会发生这种情况。

  

过滤类似于使用Where限制结果列表。两种方法都会影响结果   结果列表,但是当您使用过滤器时,搜索命中的评分/排名不受过滤器的影响。   Developer's Guide to Item Buckets and Search

对Sitecore 7团队博客上何时使用过滤器有很好的讨论: Making Good Part 4: Filters, Paging and I'm feeling lucky.

答案 3 :(得分:-1)

如果您只想搜索整个单词,可以使用空格为searchterm加前缀和后缀。虽然这并不能解决所有情况。