2017-02-21 73 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); 
    } 

這是測試代碼

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" 
    }); 

我預計斷言工作改變了她的代名詞「FEDERICO的「ALCALDE KOOPER」串COOPER「,但這不會發生。

有人知道我的錯誤在哪裏或爲什麼我的代碼不起作用?

+0

請告訴我們你看到的錯誤是什麼。 –

+0

@ M.Prokhorov我期待斷言工作改變了她的同義詞「FEDERICO COOPER」的「ALCALDE KOOPER」字符串,但是這沒有發生。 – Figa17

回答

0

原因這些行爲,就是你從 FEDERICO COOPER添加多字同義詞ALCALDE KOOPER(代碼中,我看到了從輸出到輸入附加鏈接(這是FEDERICO COOPER),這是ALCALDE KOOPER

以後你'正在測試令牌FEDERICO的同義詞,但沒有來自它的連接,這就是爲什麼你會得到空的響應和斷言錯誤。因此,如果您要將FEDERICO的同義詞添加到ALCALDE

但是,即使你能做到這一點,也與建設SynonymMap一個錯誤,你使用ignoreCase PARAM與true值,這意味着:

的情況下,褶皺輸入與字符#toLowerCase匹配(INT )。 注意,如果設置爲true,這是你的責任,當你創建SynonymMap

因此,而你需要在測試中使用小寫版本或設置ignoreCasefalse

您爲小寫輸入項可以查看參考代碼here