2011-02-02 54 views
8

我們使用Lucene作爲sitecore的一部分進行文本搜索。 是否有任何方法可以忽略sitecore搜索中的停用詞(如a,an,...)?sitecore中的停用詞

+0

這是什麼情況?如果你搜索**帽子裏的貓**你希望它真的只是搜索,就好像你輸入了**貓帽子**?或者你的意思是在結果中將它們濾除? – 2011-02-02 12:43:55

回答

14

默認情況下,Sitecore使用Lucene標準分析器 - Lucene.Net.Analysis.Standard.StandardAnalyzer。你可以看到這是在web.config文件的/configuration/sitecore/search/analyzer元素中定義的。 StandardAnalyzer類的構造函數之一接受字符串數組,它將視爲停用詞。默認情況下,它使用的停止詞,其中包括硬編碼的列表:

「一」,「一個」,「和」,「是」,「是」,「在」, 「是」,「但「,」by「,」for「,」if「,」in「, 」into「,」is「,」it「,」no「,」not「,」of「,」 「 「」,「這樣」,「那個」,「該」, 「他們」,「那麼」,「那裏」,「這些」, 「他們」,「這個」,「到」,「是」,「將」 ‘與’

如果你想覆蓋這種行爲,我想你應該繼承StandardAnalyzer並覆蓋其默認構造函數採取停止w ^而不是硬編碼數組。你有各種選擇,甚至從文本文件中讀取它。不要忘記在web.config中用你的標準類來替換標準類。

請參閱StandardAnalyzer類的其他構造函數以瞭解更多詳細信息。 .NET Reflector是你的朋友在這裏。

+0

謝謝..如果你能分享代碼的心臟.. – rahul 2011-02-03 05:30:52

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"/> 

最後你只需要像搜索那樣在搜索配置中註冊你的分析儀s

<Analyzer ref="search/caseanalyzer" />