2014-02-17 16 views
1

我在asp.net應用程序中使用lucene.net和雪球分析器。改進lucene.net分析器

對於我正在使用的特定語言,我有以下問題: 對於具有不同含義的兩個特定單詞,在它們被阻止之後結果是相同的,因此搜索它們中的任何一個都會產生結果。

我該如何教分析器要麼不幹這兩個單詞,要麼儘管說出它們,但知道它們有不同的含義。

回答

0

我正在從記憶這裏工作,但正如我記得在其中一個構造函數中,您可以傳遞一組停用詞,這將停止傳入的詞被阻止。

+0

就我所知,在搜索過程中,停用詞會被忽略。這不是我想要的。我希望能夠搜索這兩個詞。我所缺少的是分析器區分它們的能力,因爲在聲明之後它們是平等的。 – Gnomo

0

使用Lucene 4.0,EnglishAnalyzer現在有這個能力,因爲它有一個constructor which takes a stemExclusionSet

當然,Lucene.Net是達不到的Lucene 4還,所以脂肪很多優秀的,做的。

但是,EnglishAnalyzer通過使用KeywordMarkerFilter來完成此操作。因此,您可以創建自己的分析器,覆蓋tokenStream方法,並在SnowballFilter之前將鏈接添加到KeywordMarkerFilter

喜歡的東西:

public TokenStream tokenStream(String fieldName, Reader reader) { 
    TokenStream result = new StandardTokenizer(reader); 
    result = new StandardFilter(result); 
    result = new LowerCaseFilter(result); 
    if (stopSet != null) 
     result = new StopFilter(result, stopSet); 
    result = new KeywordMarkerFilter(result, stemExclusionSet); 
    result = new SnowballFilter(result, name); 
    return result; 
} 

你需要構建自己的stemExclusionSet(見CharArraySet)。