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

Я ожидал, что утверждение работы Изменение «алькальд Kooper» строка для ее синоним «Federico COOPER ", но этого не происходит.

Кто-то знает, где моя ошибка или почему мой код не работает?

+0

Пожалуйста, сообщите нам, какая ошибка вы видите. –

+0

@ М.Прохоров. Я ожидал, что работа утверждения изменит строку «ALCALDE KOOPER» для ее синонима «FEDERICO COOPER», но этого не происходит. – Figa17

ответ

0

Причина этого поведения, является то, что вы добавляете многословную синоним из FEDERICO COOPER в ALCALDE KOOPER (в коде, я видел, добавив ссылку с выхода (который FEDERICO COOPER) для ввода, которое ALCALDE KOOPER)

Позже вы 'повторное тестирование синонимов для токена FEDERICO, но от него нет никакого соединения, поэтому вы получаете пустой ответ и ошибку утверждения. Итак, если вы добавите синонимы от FEDERICO до ALCALDE.

Но, даже если вы сделаете это, есть ошибка с созданием SynonymMap, вы использовали ignoreCase параметров с true значения, что означает:

случай-складывает вход для согласования с символами # toLowerCase (INT). Обратите внимание, если вы установите это правду, это ваша ответственность, чтобы нижний регистр запись ввода при создании SynonymMap

Так, а вам нужно использовать строчные версии в тестировании или установить ignoreCase в false

You может проверить ссылочный код here