我在asp.net應用程序中使用lucene.net和雪球分析器。改進lucene.net分析器
對於我正在使用的特定語言,我有以下問題: 對於具有不同含義的兩個特定單詞,在它們被阻止之後結果是相同的,因此搜索它們中的任何一個都會產生結果。
我該如何教分析器要麼不幹這兩個單詞,要麼儘管說出它們,但知道它們有不同的含義。
我在asp.net應用程序中使用lucene.net和雪球分析器。改進lucene.net分析器
對於我正在使用的特定語言,我有以下問題: 對於具有不同含義的兩個特定單詞,在它們被阻止之後結果是相同的,因此搜索它們中的任何一個都會產生結果。
我該如何教分析器要麼不幹這兩個單詞,要麼儘管說出它們,但知道它們有不同的含義。
我正在從記憶這裏工作,但正如我記得在其中一個構造函數中,您可以傳遞一組停用詞,這將停止傳入的詞被阻止。
使用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)。
就我所知,在搜索過程中,停用詞會被忽略。這不是我想要的。我希望能夠搜索這兩個詞。我所缺少的是分析器區分它們的能力,因爲在聲明之後它們是平等的。 – Gnomo