2013-10-08 5 views
0

맞춤 분석기의 TokenStream에 필터를 두 개 이상 적용하려고합니다. 다음은 코드입니다.Lucene Analyzer (Lucene 4.4)에서 다중 필터를 사용하는 방법

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 문서를 따른다. 누군가가 나를 어떻게 작동시키는 지 설명해 주시겠습니까?

많은 감사,

답변

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); 
} 
+0

나는 그 실수를했다는 것을 믿을 수 없다. (나는 이제 내가 쉬어야한다고 생각한다.) 고맙습니다, femtoRgon. – chepukha