我发现包含'of','和','the'等的搜索不会返回结果,因为Lucene删除了停用词。因此,如果我搜索标题为“第一次世界大战的后果”的项目,我将得到零结果。
但是,如果我删除''和'',那么我正在寻找“第一次世界大战的后果”。我会收到预期的文件。
ContentSearch API是否会从查询中删除停用词?这是一个可以配置Lucene删除的东西吗?或者我应该在构建查询之前删除这些停用词吗?
由于 亚当
答案 0 :(得分:2)
您可以将Sitecore标准分析器配置为接受您自己的自定义停用词集。 创建一个带有停用词的文本文件(每行一个停用词),然后在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]\Data\indexes\stopwords.txt</param>
</param>
</param>
</param>
进一步阅读:我撰写了一篇关于此问题的博文,可能会有所帮助http://blog.horizontalintegration.com/2014/03/19/sitecore-standard-analyzer-managing-you-own-stop-words-filter/
答案 1 :(得分:1)
我认为这与blog的问题存在同样的问题。
您可以尝试按照博文中的步骤进行操作吗?
其他选项可以是创建自定义分析器并向构造函数提供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)
{
}
}
修改后,您需要更改配置文件。关于Analyzer的一篇很好的博文,你可以找到here。 P.S。:如果真的有效,我没有尝试我的代码。