Как я могу применить минимальное совпадение к запросу фонетического соответствия?
В нашем индексе есть поле, которое анализируется с помощью фонетического фильтра Байдера-Морса, и когда мы запрашиваем это поле, мы иногда получаем очень странные совпадения.
Например, если вы ищете "Heine", вы найдете "Chatten" в качестве фонетического совпадения. Я считаю, что нет серьезных аргументов в пользу того, что эти два фонетически похожи, независимо от того, какой язык вы считаете.
Причина, по которой это считается совпадением, заключается в фонетических синонимах, в которые преобразуются исходные термины. И "Heine", и "Chatten" превращаются в дюжину фонетических синонимов, и существует только одно совпадение, один синоним назначен обоим (синоним "xan"). Таким образом, 1 из 12 не очень хороший матч.
У меня нет опыта, чтобы определить, имеет ли смысл преобразование в синонимы или нет. Вот почему мой первый инстинкт состоял в том, чтобы "решить" эту проблему, введя условие минимального соответствия, с намерением, чтобы этого было недостаточно для совпадения одного синонима. Я планировал поиграть с некоторыми ценностями, чтобы почувствовать, что будет хорошим компромиссом.
Но я не зашел так далеко, потому что минимальное совпадение не похоже на запрос фонетического совпадения.
Вот как выглядит мой запрос. как правило, существует гораздо больше подзапросов для других полей, которые я удалил для ясности / простоты, поэтому есть вложенный запрос bool, который кажется устаревшим в этом упрощенном примере, просто чтобы вы знали:
{
"query": {
"bool": {
"filter": [
{
"term": {
"company": {
"value": "0"
}
}
},
{
"term": {
"accountNo": {
"value": "80529335"
}
}
}
],
"should": [
{
"bool": {
"should": [
{
"match": {
"address.street": {
"query": "Heinestr.",
"minimum_should_match": "3<75%"
}
}
}
],
"minimum_should_match": "1"
}
}
],
"minimum_should_match": "100%"
}
}
}
я перепробовал все мыслимые значения для "imum_should_match": "3<75%", но, насколько я могу судить, это никак не повлияло на результат.
я ожидал бы, что при установке этого значения>1 совпадение одного синонима больше не будет достаточно, чтобы получить совпадение.
есть идеи, как мне этого добиться?
заранее спасибо!
С уважением Марио К.
ОБНОВЛЕНИЕ № 1:
Итак, тем временем в чем-то научился.
Кажется, что minimal_should_match относится не к числу фонетических синонимов, которые представляют исходный термин, а к количеству оригинальных поисковых терминов.
так, например, если я ищу "Quick Brown Fox" с помощью minimal_should_match="3<75%", то это означает, что все "Quick", "Brown" и "Fox" должны иметь фонетические совпадения в проиндексированном документе чтобы он стал хитом ("3<75%" означает, что существует 3 или менее терминов, все они должны совпадать).
Ранее я понимал, что, подобно анализатору NGram/Trigram, три слова "Quick", "Brown" и "Fox" будут преобразованы в их отдельные фонетические синонимы во время индекса (вероятно, в результате получится список из 20 30 синонимов), и из этих 20-30 синонимов 75% (потому что их более 3) должны совпадать, чтобы получить хит.
Теперь, когда я понял это, я понимаю, почему minimal_should_match не сработал так, как я хотел.
НО, я все еще ищу способ повлиять на поведение, что совпадения одного фонетического синонима достаточно для совпадения (см. Выше, где я объясняю, почему "Гейне" против "Чаттена" является фонетическим совпадением без этого).
У меня была идея, и я думал, что каждый подобранный синоним внесет свой вклад в общую оценку, поэтому, возможно, я мог бы каким-то образом использовать min_score для определения показателя отсечки, когда было найдено недостаточно синонимов. Но я не нашел способа ограничить min_score фонетическим подзапросом.
Итак, я был бы признателен за дополнительные идеи.
с уважением,
Марио