在sitecore中停用单词

时间:2011-02-02 07:17:04

标签: lucene sitecore

我们正在使用Lucene进行文本搜索,作为sitecore的一部分。 是否有任何方法可以忽略sitecore搜索中的停用词(如a,an,...)?

2 个答案:

答案 0 :(得分:14)

默认情况下,Sitecore使用Lucene标准分析器 - Lucene.Net.Analysis.Standard.StandardAnalyzer。您可以看到这是在web.config文件的/configuration/sitecore/search/analyzer元素中定义的。 StandardAnalyzer类的一个构造函数接受它将考虑停用词的字符串数组。默认情况下,它使用硬编码的停用词列表,其中包括:

  

“a”,“an”,“and”,“are”,“as”,“at”,   “be”,“but”,“by”,“for”,“if”,“in”,   “into”,“is”,“it”,“no”,“not”,“of”,   “on”,“or”,“such”,“that”,“the”,   “他们的”,“然后”,“那里”,“这些”,   “他们”,“这个”,“到”,“是”,“将”,   “与”

如果您想要覆盖此行为,我认为您应该继承StandardAnalyzer并覆盖其默认构造函数,以从其他来源而不是硬编码数组中获取停用词。您有各种选项,甚至可以从文本文件中读取它。不要忘记在web.config中用你的标准类替换它。

有关详细信息,请参阅StandardAnalyzer类的其他构造函数。 .NET Reflector是你的朋友。

答案 1 :(得分:4)

Yans帖子的一个例子:

public class CaseAnalyzer : Lucene.Net.Analysis.Standard.StandardAnalyzer
{
   private static Hashtable stopWords = new Hashtable(); //{{"by","by"}}; <-- Makes "by" a stopword that will not be matched in analyzer
   public CaseAnalyzer() : base(Lucene.Net.Util.Version.LUCENE_29, stopWords)
   {      
   }
}

这应该在

下的web.config中注册
/configuration/sitecore/search/analyzer

分析仪注册的一个例子    

<caseanalyzer type="EBF.Business.Search.Analyzers.CaseAnalyzer, EBF.Business, Version=1.0.0.0, Culture=neutral"/>

最后,您只需要在搜索配置中注册您的分析器

<Analyzer ref="search/caseanalyzer" />