0

カスタマイズしたアナライザーで 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に従います。誰かがそれを機能させる方法を説明してもらえますか?

どうもありがとう、

4

1 に答える 1

7

あなたの問題は最後の行にあります。フィルターのチェーンを作成し、return ステートメントで back を渡すことによってそれを短絡しnew PorterStemFilter(source)ます。これは、チェーンの前のフィルターではなく、トークナイザーに直接配置されたステム フィルターです。これは次のようになります。

@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);
} 
于 2013-10-08T23:32:13.490 に答える