Sitecore 7 ContentSearch API是否删除查询中的停用词?

我发现包含'','和',''等的搜索不会返回结果,因为Lucene已经删除了停用词。 因此,如果我搜索一个题为“第一次世界大战后果”的项目,我将得到零结果。

但是如果我剥离''和''这个',那么我正在寻找“第一次世界大战后的善后”。 我会收到预期的文件。

ContentSearch API是否从查询中删除停用词? 这是一个可以配置Lucene删除的东西吗? 或者我应该建立我的查询之前删除这些停止词?

感谢Adam


您可以配置Sitecore标准分析器来接受您自己的自定义Stopwords集。 用停用词创建一个文本文件(每行一个停止词),然后在Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config文件中进行以下配置更改

<param desc="defaultAnalyzer" type="Sitecore.ContentSearch.LuceneProvider.Analyzers.DefaultPerFieldAnalyzer, Sitecore.ContentSearch.LuceneProvider">
  <param desc="defaultAnalyzer" type="Lucene.Net.Analysis.Standard.StandardAnalyzer, Lucene.Net">
    <param hint="version">Lucene_30</param>
      <param desc="stopWords" type="System.IO.FileInfo, mscorlib">
      <param hint="fileName">[FULL_PATH_TO_SITECORE_ROOT_FOLDER]Dataindexesstopwords.txt</param>
      </param>
  </param>
</param>   

进一步阅读:我写了一篇关于这个问题的博客文章,可能会有所帮助http://blog.horizo​​ntalintegration.com/2014/03/19/sitecore-standard-analyzer-managing-you-own-stop-words-filter /


我认为这是来自这个博客的问题同样的问题。

你可以尝试按照博客文章中的步骤操作吗?

其他选项可以是创建自定义分析器并将构造函数提供给stopWords列表。 就像是:

public class CustomAnalyzer : Lucene.Net.Analysis.Standard.StandardAnalyzer
{
    private static Hashtable stopWords = new Hashtable()
    {
        {"of", "of"},
        {"stopword2", "stopword2"}
    }; 
    public CustomAnalyzer() : base(Lucene.Net.Util.Version.LUCENE_30, stopWords)
    {      
    }
}

修改后,您需要更改您的配置文件。 有关分析器的好博客文章,你可以在这里找到。 PS:如果真的有效,我没有试过我的代码。

链接地址: http://www.djcxy.com/p/18893.html

上一篇: Does the Sitecore 7 ContentSearch API remove stop words from queries?

下一篇: How to flatten a nested list in python?