у нас есть поле в нашем индексе, которое анализируется с помощью фонетического фильтра Байдера-Морса, и когда мы запрашиваем это поле, мы иногда получаем очень странные совпадения.
Например, если вы ищете "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% ", но, насколько я могу судить, это никак не влияет на результат. </p>
Я ожидал бы, что при установке этого значения> 1 совпадение одного синонима больше не будет достаточным для получения совпадения.
есть идеи, как мне этого добиться?
Заранее спасибо!
С уважением
Марио К.
ОБНОВЛЕНИЕ № 1:
Итак, тем временем научился чему-то.
Кажется, что minimal_should_match применяется не к числу фонетических синонимов, которые представляют исходный термин, а к количеству оригинальных поисковых терминов.
так, например, если я ищу "Quick Brown Fox" с помощьюimum_should_match = "3 <75%", то это означает, что все "Quick", "Brown" и "Fox" должны иметь фонетические совпадения в индексированный документ, чтобы он стал хитом («3 <75%» означает, что существует 3 или менее терминов, все они должны совпадать). </p>
ранее мое понимание заключалось в том, что - подобно анализатору NGram / Trigram - что три слова "Quick", "Brown" и "Fox" будут преобразованы в их отдельные фонетические синонимы во время индекса (вероятно, в результате получится список из 20-30 синонимов), и из этих 20-30 синонимов 75% (потому что их более 3) должны совпадать, чтобы получить хит.
Теперь, когда я понял это, я понимаю, почему Minim_should_match не сработал так, как я хотел.
НО, я все еще ищу способ повлиять на поведение, которое достаточно для совпадения одного фонетического синонима (см. Выше, где я объясняю, почему «Гейне» против «Чаттена» является фонетическим соответствием без это).
У меня была идея, и я думал, что каждый подобранный синоним внесет свой вклад в общую оценку, поэтому, возможно, я мог бы каким-то образом использовать min_score для определения показателя отсечки, когда было найдено недостаточно синонимов. Но я не нашел способа ограничить min_score фонетическим подзапросом.
Итак, я буду признателен за дополнительные идеи.
С наилучшими пожеланиями,
Mario