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

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

Например, если вы ищете "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 фонетическим подзапросом.

Итак, я был бы признателен за дополнительные идеи.

с уважением,

Марио

0 ответов

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