2014-02-05 49 views
7

我发现包含'','和',''等的搜索不会返回结果,因为Lucene已经删除了停用词。因此,如果我搜索一个题为“第一次世界大战后果”的项目,我将得到零结果。但是如果我剥离''和'那个',那么我正在寻找“第一次世界大战后果”。我会收到预期的文件。Sitecore 7 ContentSearch API是否从查询中删除停用词?

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

感谢 亚当

回答

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) 
    {  
    } 
} 

修改后您需要更改您的配置文件。一篇关于分析器的好博客文章,你可以找到here。 P.S .:我没有尝试我的代码,如果真的有效。

2

您可以将Sitecore Standard Analyzer配置为接受您自己的自定义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]\Data\indexes\stopwords.txt</param> 
     </param> 
    </param> 
</param> 

延伸阅读:我写了博客文章关于此问题并可能有所帮助http://blog.horizontalintegration.com/2014/03/19/sitecore-standard-analyzer-managing-you-own-stop-words-filter/

+0

即使他们回答问题,链接到网页也不是很好的答案。答案,包括相关的代码应该包含在SO网站中。 – Novocaine

+0

Novocaine88,感谢您的评论,作为一个新手,所以这当然有帮助。 –

+0

有没有办法使用相对路径而不是绝对路径到stopwords.txt文件?我试过这样的东西,但它不起作用: $(dataFolder)/stopwords.txt – chenz

相关问题