2017-02-21 3 views
0

동의어 그래프를 테스트하려고했지만 예상대로 작동하지 않으며 정답을 반환하지 않습니다.SynonymGraphFilter Lucene이 작동하지 않는 이유는 무엇입니까?

이 내 사용자 지정 분석기에서 createComponents 사용자 정의 방법은

public SuggestAnalizer(SynonymMap synonymMap) { 
     this.synonymMap = synonymMap; 
     this.stopList = Collections.emptyList(); 
    } 


    @Override 
    protected TokenStreamComponents createComponents(String s) { 

     Tokenizer tokenizer = new StandardTokenizer(); 
     TokenStream tokenStream = new SynonymGraphFilter(tokenizer, synonymMap, true); 

     tokenStream = new FlattenGraphFilter(tokenStream); 

     return new TokenStreamComponents(tokenizer, tokenStream); 
    } 

이 그녀의 동의어 "FEDERICO에 대해"Alcalde은 KOOPER "문자열을 변경 주장 작업을 예상

String entrada = "ALCALDE KOOPER"; 
    String salida = "FEDERICO COOPER"; 

    SynonymMap.Builder builder = new SynonymMap.Builder(true); 

    CharsRef input = SynonymMap.Builder.join(entrada.split(" "), new CharsRefBuilder()); 
    CharsRef output = SynonymMap.Builder.join(salida.split(" "), new CharsRefBuilder()); 


    builder.add(output, input, true); 

    suggestAnalizer = new SuggestAnalizer(builder.build()); 

    TokenStream tokenStream = suggestAnalizer.tokenStream("field", entrada2); 

    assertTokenStreamContents(tokenStream, new String[]{ 
      "FEDERICO" 
    }); 

    assertAnalyzesTo(suggestAnalizer, entrada, new String[]{ 
      "FEDERICO" 
    }); 

테스트 코드 쿠퍼 (COOPER) "라고 말하지만, 이것은 일어나지 않습니다.

누군가 내 오류가 어디인지 또는 내 코드가 작동하지 않는 이유를 알고 있습니까?

+0

표시되는 오류는 무엇인가요? –

+0

@ M.Prokhorov 나는 그녀의 동의어 "FEDERICO COOPER"에 대한 "ALCALDE KOOPER"문자열을 변경하는 단언 작업을 기대했지만 이것은 발생하지 않습니다. – Figa17

답변

0

이러한 행동에 대한 이유, 당신은 ALCALDE KOOPERFEDERICO COOPER에서 여러 단어의 동의어를 추가하는 것이 당신이

나중에 (코드에서, 나는 ALCALDE KOOPER입니다 입력 FEDERICO COOPER입니다 출력에서 ​​추가 링크()를 보았다) 토큰에 대한 동의어를 테스트했지만 연결이 없으므로 빈 응답과 어설 션 오류가 발생합니다. 따라서 동의어를 FEDERICO에서 ALCALDE으로 추가 할 수 있습니다.

가 문자 #의와 toLowerCase와 일치하는 입력을 대소 폴드 (INT : 당신이 할 경우에도

그러나이, SynonymMap 구축에 실수가있다, 당신은 의미 true 값으로 ignoreCase PARAM을 사용). 당신이 true로 설정하면 참고, 당신이 아니라 당신이 테스트 소문자 버전을 사용하거나 false

당신에게로 ignoreCase를 설정해야

그래서 SynonymMap을 만들 때 입력 항목을 소문자로 당신의 책임 참조 코드를 확인할 수 있음 here

관련 문제