как я могу применить минимальное совпадение к запросу фонетического соответствия? - PullRequest
0 голосов
/ 11 июля 2019

у нас есть поле в нашем индексе, которое анализируется с помощью фонетического фильтра Байдера-Морса, и когда мы запрашиваем это поле, мы иногда получаем очень странные совпадения.

Например, если вы ищете "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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...