Как увеличить максимальную длину кода фонетического фильтра метафона эластичного поиска?

Я использую фильтр фонетических плагинов для эластичного поиска. https://github.com/elastic/elasticsearch-analysis-phonetic

Когда я создаю индекс, я создаю пользовательский фильтр со следующими настройками.

soundex: {
            type: "phonetic",
            encoder: "metaphone",
            replace: "true"
}

Это работает нормально, но создает мета-токены с максимальной длиной 4 символа, что добавляет слишком много шума в мои результаты поиска. Например, я получаю KNTR как для контрацепции, так и для контроля (это медицинские данные).

В соответствии с неожиданными результатами алгоритма Metaphone базовый Java API содержит значение setMaxCodeLen. Как вы устанавливаете это при настройке в asticsearch?

Я хотел бы сделать что-то вроде:

    soundex: {
                type: "phonetic",
                encoder: "metaphone",
                replace: "true",
                maxcodelen: 8
    }

Но до сих пор я не смог определить, возможно ли настроить кодировщик для увеличения максимальной длины закодированных токенов. Можно ли это настроить? Если так, то как?

1 ответ

Решение

Я думаю, что это невозможно настроить. Я проверил исходный код плагина, и кажется, что легко достичь того, что вы просите.

В PhoneticTokenFilterFactory.java вы увидите:

this.maxcodelength = 0;
this.replace = settings.getAsBoolean("replace", true);

Как вы можете догадаться, replace параметр может быть настроен, но maxcodelenght всегда установлен на 0, Таким образом, вы можете изменить эту строку следующим образом:

this.maxcodelength = settings.getAsInt("maxcodelen", 0);

Я назвал новое свойство maxcodelen, потому что это имя, которое вы используете в своем примере.

Затем вы можете скомпилировать его и установить модифицированный плагин из вашего локального ( проверьте, как установить локальные плагины)

Если все работает, и вы чувствуете, как, отправьте запрос тянуть

Другие вопросы по тегам