Поиск в 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, поэтому в большинстве случаев вы сможете реплицировать одну и ту же конфигурацию анализатора.
Надеюсь, это поможет.