Поиск в Azure. Как сделать так, чтобы в мои результаты были включены все сочетания пола и множественности?

Я сталкиваюсь с бизнес-требованием для французского веб-сайта, который требует сопоставления мужских / женских / единственных и множественных версий слова. Самый простой способ описать это - показать само требование в этом вопросе.

Требование 1 - поиск Чиен (мужской / единственный)

Следующие слова должны быть включены в результаты поиска:

  • Chien (мужской / единственный)
  • chiens (мужской / множественное число)
  • Chienne (женский / единственный)
  • chiennes (женский / множественное число)

Когда я исследовал это требование, я использовал API Analyze с анализатором "fr.microsoft", чтобы быстро протестировать различные сценарии.

Запрос № 1

{"analyzer": "fr.microsoft", "text": "chien"}

Ответ № 1

  • цзянь

Запрос № 2

{"analyzer": "fr.microsoft", "text": "chiens"}

Ответ № 2

  • цзянь
  • Chiens

Запрос № 3

{"analyzer": "fr.microsoft", "text": "chienne"}

Ответ № 3

  • цзянь
  • chienner
  • Chienne

Запрос № 4

{"analyzer": "fr.microsoft", "text": "chiennes"}

Ответ № 4

  • цзянь
  • chienner
  • chiennes

Req 2 - поиск лектора (мужской / единственный)

Следующие слова должны быть включены в результаты поиска:

  • лектор (мужской / единственный)
  • лекторы (мужской / множественное число)
  • лектриса (женская / единственная)
  • лектрисы (женский / множественное число)

Я снова использовал API Analyze с анализатором "fr.microsoft", чтобы быстро протестировать различные сценарии.

Запрос № 1

{"analyzer": "fr.microsoft", "text": "lecteur"}

Ответ № 1

  • Lecteur

Запрос № 2

{"analyzer": "fr.microsoft", "text": "chiens"}

Ответ № 2

  • Lecteur
  • lecteurs

Запрос № 3

{"analyzer": "fr.microsoft", "text": "lectrice"}

Ответ № 3

  • Lecteur
  • lectrice

Запрос № 4

{"analyzer": "fr.microsoft", "text": "lectrices"}

Ответ № 4

  • Lecteur
  • lectrices

Мои впечатления и вопросы

  • Мое первоначальное впечатление состоит в том, что поиск "chiennes" не будет соответствовать документу, содержащему "chienne", потому что "chiennes" разбивается только на следующее: chien, chienner, chiennes.

  • Это впечатление правильно? Или поиск "chiennes" все равно вернет документ, содержащий "chienne", потому что поисковый термин "chiennes" будет токенизирован на chien,chienner, chiennes, в то время как сам документ будет иметь токен "chienne" на chien,chienner, chienne, так что в конечном итоге будет быть спичкой Обратите внимание, что я выделил курсивом токены поиска и индекса, которые, я думаю, будут соответствовать.

  • Обратите внимание, что приведенные выше два примера требований могут на самом деле оказаться дубликатом моего вопроса femme vs femmes, который я опубликовал ранее сегодня: Поиск в Azure: поиск единственной версии слова, но все же включение множественной версии в результаты.


Пример требования 3 - поиск MELEE

Следующие слова должны быть включены в результаты поиска:

  • MELEE
  • рукопашная
  • Рукопашник
  • mêlant
  • рукопашная
  • Меле
  • Мелер

Запрос № 1

{"analyzer": "fr.microsoft", "text": "MELEE"}

Ответ № 1

  • рукопашная

Запрос № 2

{"analyzer": "fr.microsoft", "text": "MÊLEE"}

Ответ № 2

  • рукопашная
  • рукопашная

Запрос № 3

{"analyzer": "fr.microsoft", "text": "Mêlée"}

Ответ № 3

  • Мелер
  • Мелер
  • меле
  • Меле
  • рукопашная
  • рукопашная

Запрос № 3

{"analyzer": "fr.microsoft", "text": "mêlant"}

Ответ № 3

  • Мелер
  • Мелер
  • melant
  • mêlant

В этом примере я мог бы продолжить анализ вызовов API, но здесь я могу сравнить его с существующим веб-сайтом (функциональность которого нам необходимо воспроизвести) и новым веб-сайтом. Существующий веб-сайт позволяет мне искать "рукопашный", и он найдет документы с "mêlant". Скриншот существующего сайта

Но, основываясь на результатах Analyze API, я вижу, что при поиске "melee" не будет найдено "mêlant", потому что "melee" только токенизируется до "melee", в то время как "mêlant" распространяется только на meler, mêler, melant и mêlant. Здесь нет совпадений.

Мои впечатления и вопросы

  • Я использовал Google Translate и вижу, что "рукопашный бой" означает "драка" или "драка".
  • Я использовал Google Translate и вижу, что "mêlant" означает "смешивание".
  • Вот почему поиск "ближний бой" не будет соответствовать "mêlant"?
  • Какие у меня варианты, если бизнес-требования соответствуют? Должен ли я использовать синонимы? Если нет, каковы мои варианты здесь?
  • Обратите внимание, что на существующем веб-сайте используется SOLR, и нам не предоставляется доступ к какому-либо существующему коду или использованию SOLR. Мы должны были перепроектировать все.
  • Мне удалось заполучить конфигурацию SOLR, и, похоже, именно так настроена их текущая конфигурация SOLR для французского языка. Похоже, они используют какой-то словарь.


Пожалуйста, порекомендуйте.

1 ответ

Решение

Я думаю, что я ответил на первое и второе требование в вашем другом посте: Поиск Azure: поиск единственной версии слова, но все же включаю множественную версию в результаты, дайте мне знать, если я что-то пропустил.

Что касается третьего требования, я подозреваю, что случается так, что веб-сайт, на который вы ссылаетесь, использует агрессивную стратегию противодействия. Это означает, что оба слова melee или mêlant сводятся к одному корню. Кроме того, они могут использовать нечеткий поиск или другие методы расширения запросов, такие как расширение синонимов. Вопрос в том, хотите ли вы, чтобы документы с mêlant соответствовали слову melee, если они означают разные вещи.

В Azure Search возможны нечеткий поиск и расширение синонимов. Вы также можете поэкспериментировать с пользовательскими анализаторами, чтобы получить контроль над тем, как происходит обработка. Мы используем компоненты Lucene, которые совпадают с компонентами, используемыми в SOLR, поэтому в большинстве случаев вы сможете реплицировать одну и ту же конфигурацию анализатора.

Надеюсь, это поможет.

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