2017-12-27 2 views
0

나는 Lucene 6.2.0을 사용 중이며 검색을 위해 맞춤 분석기를 구현하려고합니다. 내가 그것을 이렇게 나에게 불법 상태 예외를주고있다 인덱스를 검색하고 경우에 지금 내 분석기 클래스lucene에서 Synonymap을 사용하는 방법 6.2.0

 public static class myAnalyzer extends Analyzer 
{ 
    @Override 
    protected TokenStreamComponents createComponents(String reader) { 
     final StandardTokenizer tok = new StandardTokenizer(); 

     TokenStream result = new StandardFilter((TokenStream) tok); 
     result = new LowerCaseFilter(result); 
     return new TokenStreamComponents(tok, result); 

} 
} 

입니다.

Exception in thread "main" java.lang.IllegalStateException: TokenStream contract violation: reset()/close() call missing, reset() called multiple times, or subclass does not call super.reset(). Please see Javadocs of TokenStream class for more information about the correct consuming workflow. 
at org.apache.lucene.analysis.Tokenizer$1.read(Tokenizer.java:109) 

i tried using result.close(); but it didnt solved the problem.. 
so what am i doing wrong ? am I using two instances of the same analyzer. 

모든 코드 예제는 매우 유용 할 것입니다.

+0

무엇이 문제입니까? SynonymMap 권한을 SynonymFilter의 생성자에 전달합니다. – femtoRgon

+0

감사합니다. femtoRgon –

답변

0

createComponents은 Reader 인수를 더 이상 사용하지 않으므로 메서드가 호출되지 않습니다. 실제로 호출 될 메소드는 실제적으로 Analyzer에있는 메소드를 대체하는 메소드입니다. 구현시 null을 리턴하는 스텁 일뿐입니다.

createComponents(string, Reader)을 제거하고 createComponents(string)에 코드를 입력하십시오 (당연히 Tokenizer.setReader으로 전화 거는 것을 제거하십시오).

+0

도움 주셔서 감사합니다. –

관련 문제