Как увеличить максимальную длину кода фонетического фильтра метафона эластичного поиска?
Я использую фильтр фонетических плагинов для эластичного поиска. 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, потому что это имя, которое вы используете в своем примере.
Затем вы можете скомпилировать его и установить модифицированный плагин из вашего локального ( проверьте, как установить локальные плагины)
Если все работает, и вы чувствуете, как, отправьте запрос тянуть