如何在Lucene Analyzer上使用多个过滤器(Lucene 4.4)

时间:2013-10-08 22:04:20

标签: java filter lucene analyzer

我尝试在自定义分析器中的TokenStream上应用多个过滤器。以下是代码:

public class CustomizeAnalyzer extends Analyzer {
//code omitted

@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
    Tokenizer source = new LetterTokenizer(Version.LUCENE_44, reader);              
    TokenStream filter = new LowerCaseFilter(Version.LUCENE_44, source);                
    filter = new StopFilter(Version.LUCENE_44, filter, stopWords);                  
    return new TokenStreamComponents(source, new PorterStemFilter(source));
}                                              
}

然而,LowerCaseFilter不会被使用。我按照文档here进行操作。 有人可以解释一下如何让它发挥作用吗?

非常感谢,

1 个答案:

答案 0 :(得分:6)

你的问题在最后一行。您创建了一个过滤器链,然后通过返回new PorterStemFilter(source)(它是直接位于标记器上的干式过滤器)而不是链中较早的过滤器,在return语句中将其短路。这应该是:

@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
    Tokenizer source = new LetterTokenizer(Version.LUCENE_44, reader);              
    TokenStream filter = new LowerCaseFilter(Version.LUCENE_44, source);                
    filter = new StopFilter(Version.LUCENE_44, filter, stopWords);                  
    filter = new PorterStemFilter(filter);
    return new TokenStreamComponents(source, filter);
}