2017-02-07 37 views
1

У меня возник вопрос о своеобразном поведении, которое я заметил в своем пользовательском анализаторе (а также в анализаторе fr.microsoft). Нижеприведенные аналитические тесты API показаны с использованием анализатора «fr.microsoft», но я видел то же точное поведение, когда я использую собственный анализатор «text_contains_search_custom_analyzer» (что имеет смысл, поскольку я основываю его на анализаторе fr.microsoft).Azure Поиск: поиск сингулярной версии слова, но все же включение множественной версии в результаты

UAT сообщила, что, когда они ищут «femme» (единственное число), они ожидают, что документы с «femmes» (множественное число) также будут найдены. Но когда я тестировал API-интерфейс анализа, кажется, что служба поиска Azure только символизирует множественное число -> множественное число + сингулярное, но при символическом сингулярности используются только особые токены. Ниже приведены примеры.

Есть ли способ, которым я могу позволить пользователю искать единственную версию слова, но все же включать множественную версию этого слова в результаты поиска? Или мне нужно использовать синонимы для преодоления этой проблемы?

Запрос с «роковым» { "анализатор": "fr.microsoft", "текста": "рокового" }

ответ от «рокового» { «@ odata.context ":" https://EXAMPLESEARCHINSTANCE.search.windows.net/ $ метаданных # Microsoft.Azure.Search.V2016_09_01.AnalyzeResult " "жетоны": [{ "маркер": "роковая", "startOffset": 0, " endOffset «: 5, "позиция": 0} ] }

Запрос с„роковых“ { "анализатор": "fr.microsoft", "текст": "роковых" }

Ответ от «роковых» { "@ odata.context": "https://EXAMPLESEARCHINSTANCE.search.windows.net/ $ метаданных # Microsoft.Azure.Search.V2016_09_01.AnalyzeResult", "жетоны": [ { "маркер": "роковая", "startOffset": 0, "endOffset": 6, "позиция": 0 }, { "маркеров": "Femmes", "startOffset": 0, "endOffset": 6, "позиция": 0} ] }

ответ

0

Просто чтобы добавить к yoape's ответ, анализатор fr.microsoft уменьшает искаженные слова до их базовой формы. В вашем случае слово femmes сводится к его единственному образу femme. Все описанные вами случаи будут работать:

  1. Поиск с использованием базовой формы слова, если в документе была указана обратная форма.

    Предположим, вы индексируете документ с помощью Vive with Femmes.
    Поисковая система индексирует следующие условия: vif, vivre, vive, femme, femmes.
    Если вы ищете любое из этих условий, например, femme, документ будет соответствовать.

  2. Поиск с измененной формой слова, если базовая форма была в документе.

    Предположим, вы индексируете документ с текстом Femme fatale.
    Поисковая система индексирует следующие условия: femme, fatal, fatale.
    Если вы ищете с термином femmes, анализатор будет производить также его базовую форму. Ваш запрос станет femmes OR femme. Документы с любым из этих условий будут соответствовать.

  3. Поиск с измененным значением, если в документе была другая измененная форма этого слова.

    Если у вас есть документ с allez, то условия allez и aller будут проиндексированы.
    Если вы ищете alle, запрос будет alle OR aller.Так как обе затухающие формы сводятся к одной и той же базовой форме, документ будет соответствовать.

Главное изучение здесь заключается в том, что анализатор обрабатывает документы, а также условия запроса. Условия нормализуются с учетом специфических для языка правил.

Я надеюсь, что это объяснит.

0

Вы используете Analyze API, который использует текстовые анализаторы, то есть не то же самое, что и поиск с помощью Search API.

Текстовые анализаторы - это то, что поддерживает поисковую систему при построении индексов, которые на самом деле находятся в нижней части поисковой системы. Чтобы структурировать индекс поиска, в нем должны быть проанализированы , здесь находятся анализаторы. Они могут понимать разные языки и анализировать текст и понимать, если, т. Е. разделение слов, удаление стоп-слов, понимание предложений и так далее.Или, как они выразились в документации: https://docs.microsoft.com/en-us/rest/api/searchservice/language-support

Searchable поля проходят анализ, наиболее часто включает в себя слово ломку, текст нормализации и фильтрации терминов. По умолчанию поля поиска в Azure Search анализируются с помощью анализатора Apache Lucene Standard (стандартный lucene) , который разбивает текст на элементы, следуя правилам «Сегментация текста Юникода». Кроме того, стандартный анализатор преобразует все символы в их нижний регистр.

То, что вы видите, на самом деле совершенно правильно, французский анализатор разбивает слово, которое вы отправляете, и возвращает возможные знаки из текста. Для первого текста он не может найти никаких других возможных токенов, кроме «femme» (я думаю, нет других слов, таких как «fem» или «femm» на французском языке?), Но для второго он может найти как «femme», женщин ".

Итак, то, что вы видите, является естественной функцией текстового анализатора.

Поиск того же текста с помощью поиска API с другой стороны должны возвращаемые документы как «роковая» и «Femmes» в, если вы установили правильный анализатор (например, fr.microsoft) для поле поиска. По умолчанию «стандартный» анализатор не обрабатывает плюралис и другие перегибы одного и того же слова.