改进lucene.net分析器

时间:2014-02-17 12:06:41

标签: lucene lucene.net stemming snowballanalyzer

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

使用我正在使用的特定语言,我遇到以下问题: 对于两个具有不同含义的特定单词后,结果是相同的,因此搜索它们中的任何一个都会产生两种结果。

我怎样才能教导分析仪不要阻止这两个词,或者虽然阻止它们,但要知道它们有不同的含义。

2 个答案:

答案 0 :(得分:0)

我在内存中工作,但我记得在其中一个构造函数中你可以传递一个停用词数组,这将阻止传入的单词被阻止。

答案 1 :(得分:0)

使用Lucene 4.0,EnglishAnalyzer现在具备此功能,因为它具有constructor which takes a stemExclusionSet

当然,Lucene.Net还没有达到Lucene 4,这样做的好多了。

但是,EnglishAnalyzer使用KeywordMarkerFilter来完成此操作。因此,您可以创建自己的Analyzer,覆盖tokenStream方法,并在KeywordMarkerFilter之前添加SnowballFilter链。

类似的东西:

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)。