Поиск Azure: поиск единственной версии слова, но все же включение множественной версии в результаты
У меня есть вопрос об особом поведении, которое я заметил в своем пользовательском анализаторе (а также в анализаторе fr.microsoft). Приведенные ниже тесты API Analyze показаны с использованием анализатора "fr.microsoft", но я видел точно такое же поведение, когда использую свой собственный анализатор "text_contains_search_custom_analyzer" (что имеет смысл, когда я основываю его на анализаторе fr.microsoft).
UAT сообщил, что, когда они ищут "femme" (единственное число), они ожидают, что также будут найдены документы с "femmes" (множественное число). Но когда я тестировал API-интерфейс Analyze, оказалось, что служба поиска Azure использует только токены множественного числа -> множественное число + единственное число, но при токенизации единственного числа используются только особые токены. Смотрите ниже примеры.
Можно ли как-то разрешить пользователю искать единственную версию слова, но при этом включить в результаты поиска множественную версию этого слова? Или мне нужно будет использовать синонимы, чтобы преодолеть эту проблему?
Запрос с "femme" { "analyzer": "fr.microsoft", "text": "femme" }
Ответ от "femme"{"@ odata.context": " https://EXAMPLESEARCHINSTANCE.search.windows.net/$ metadata # Microsoft.Azure.Search.V2016_09_01.AnalyzeResult", "tokens": [{"token": "femme", "startOffset": 0, "endOffset": 5, "position": 0}]}
Запрос с "femmes"{ "analyzer": "fr.microsoft", "text": "femmes" }
Ответ от "femmes"{"@ odata.context": " https://EXAMPLESEARCHINSTANCE.search.windows.net/$ metadata # Microsoft.Azure.Search.V2016_09_01.AnalyzeResult", "tokens": [{"token": "femme", "startOffset": 0, "endOffset": 6, "position": 0}, {"token": "femmes", "startOffset": 0, "endOffset": 6, "position": 0} ]}
2 ответа
Просто чтобы добавить ответ yoape, анализатор fr.microsoft сводит слова в их базовой форме. В вашем случае слово femmes сводится к его единственной форме femme. Все описанные вами случаи будут работать:
- Поиск по базовой форме слова, если в документе была измененная форма.
Допустим, вы индексируете документ с помощью Vive с помощью Femmes.
Поисковая система будет индексировать следующие термины: vif, vivre, vive, femme, femmes.
Если вы выполняете поиск по любому из этих терминов, например, femme, документ будет соответствовать. - Поиск с перекошенной формой слова, если базовая форма была в документе.
Допустим, вы индексируете документ с помощью текста Femme fatale.
Поисковая система будет индексировать следующие термины: femme, fatal, fatale.
Если вы ищете с термином femmes, анализатор выдаст также его базовую форму. Ваш запрос станет femmes ИЛИ femme. Документы с любым из этих условий будут совпадать. - Поиск с отклоненным от, если другая форма этого слова была в документе.
Если у вас есть документ с аллезом, термины аллез и аллергия будут проиндексированы.
Если вы ищете алле, запрос становится все или аллергия. Поскольку обе изогнутые формы сводятся к одной базовой форме, документ будет совпадать.
Ключевым моментом здесь является то, что анализатор обрабатывает документы, но также и условия запроса. Термины нормализованы с учетом языковых правил.
Я надеюсь, что это объясняет.
Вы используете API Analyze, который использует анализаторы текста, это не то же самое, что поиск с использованием API поиска.
Текстовые анализаторы - это то, что поддерживает поисковую систему при построении индексов, которая действительно находится в нижней части поисковой системы. Для структурирования поискового индекса необходимо проанализировать входящие в него документы, сюда входят анализаторы. Это те, которые могут понимать различные языки и могут анализировать текст и иметь смысл, т. Е. Разделять слова, удаление стоп-слов, понять предложения и так далее. Или, как они написали в документации: https://docs.microsoft.com/en-us/rest/api/searchservice/language-support
Доступные для поиска поля подвергаются анализу, который чаще всего включает в себя разбиение по словам, нормализацию текста и фильтрацию терминов. По умолчанию доступные для поиска поля в поиске Azure анализируются с помощью стандартного анализатора Apache Lucene (стандартная lucene), который разбивает текст на элементы в соответствии с правилами сегментации текста Unicode. Кроме того, стандартный анализатор преобразует все символы в их строчную форму.
Так что то, что вы видите, на самом деле совершенно правильно, французский анализатор разбивает слово, которое вы отправляете, и возвращает возможные токены из текста. Для первого текста он не может найти никаких других возможных токенов, кроме "femme" (я думаю, что нет других слов, таких как "fem" или "femm" на французском языке?), Но для второго он может найти и "femme", и " женщины там.
Итак, то, что вы видите, является естественной функцией текстового анализатора.
Поиск того же текста с использованием API поиска с другой стороны должен возвращать документы, содержащие как "femme", так и "femmes", если вы установили правильный анализатор (например, fr.microsoft) для поля поиска. Стандартный стандартный анализатор не обрабатывает множественное число и другие перегибы одного и того же слова.