Анализ индекса и поиска
Анализ текста выполняется в два этапа:
- Время индексирования
- При индексировании документа, значения любого поля типа
textанализируются. - Время поиска
-
При выполнении полного текстового поиска по полю
text, строка запроса (текст, который пользователь ищет) анализируется.Время поиска также называется временем запроса.
Анализатор, или набор правил анализа, используемый в каждом случае, называется индексным анализатором или анализатором поиска соответственно.
Как работают индексный и поисковый анализаторы вместе
В большинстве случаев для индексации и поиска должен использоваться один и тот же анализатор. Это гарантирует, что значения и строки запросов для поля преобразуются в один и тот же формат токенов. В свою очередь, это гарантирует, что токены будут совпадать как ожидается во время поиска.
Пример
Документ индексируется со следующим значением в поле text:
The QUICK brown foxes jumped over the dog!
Индексный анализатор для поля преобразует значение в токены и нормализует их. В данном случае каждый токен представляет собой слово:
[ quick, brown, fox, jump, over, dog ]
Эти токены затем индексируются.
Позже пользователь ищет в том же поле text:
"Quick fox"
Пользователь ожидает, что этот поиск совпадёт с ранее индексированным предложением, The QUICK brown foxes jumped over the dog!.
Однако строка запроса не содержит точных слов, использованных в исходном тексте документа:
-
QuickvsQUICK -
foxvsfoxes
Для учета этого строка запроса анализируется с помощью того же анализатора. Этот анализатор генерирует следующие токены:
[ quick, fox ]
Для выполнения поиска Elasticsearch сравнивает эти токены строки запроса с токенами, индексированными в поле text.
| Токен | Строка запроса |
text поле |
|---|---|---|
| X | X |
| X | |
| X | X |
| X | |
| X | |
| X |
Поскольку значение поля и строка запроса были проанализированы одинаково, они создали похожие токены. Токены quick и fox являются точными совпадениями. Это означает, что поиск соответствует документу, содержащему "The QUICK brown foxes jumped
over the dog!", как и ожидалось пользователем.
Когда использовать другой анализатор поиска
Хотя это встречается реже, иногда имеет смысл использовать разные анализаторы при индексировании и поиске. Для этого Elasticsearch позволяет указать отдельный анализатор поиска.
В общем случае, отдельный анализатор поиска следует указывать только тогда, когда использование одного и того же формата токенов для значений поля и строк запросов приведет к непредвиденным или нерелевантным результатам поиска.
Пример
Elasticsearch используется для создания поисковой системы, которая подбирает только слова, начинающиеся с заданного префикса. Например, поиск по tr должен вернуть tram или trope—но никогда taxi или bat.
Документ добавляется в индекс поисковой системы; этот документ содержит одно такое слово в поле text:
"Apple"
Индексный анализатор для поля преобразует значение в токены и нормализует их. В данном случае каждый токен представляет собой потенциальный префикс для слова:
[ a, ap, app, appl, apple]
Эти токены затем индексируются.
Позже пользователь ищет в том же поле text:
"appli"
Пользователь ожидает, что этот поиск найдёт только слова, начинающиеся с appli, такие как appliance или application. Поиск не должен находить apple.
Однако, если индексный анализатор используется для анализа этой строки запроса, он сгенерирует следующие токены:
[ a, ap, app, appl, appli ]
Когда Elasticsearch сравнивает эти токены строки запроса с индексированными токенами для apple, он находит несколько совпадений.
| Токен | appli | apple |
|---|---|---|
| X | X |
| X | X |
| X | X |
| X | X |
| X |
Это означает, что поиск ошибочно найдёт apple. Более того, он найдет любое слово, начинающееся с a.
Для исправления этого можно указать другой анализатор поиска для строк запросов, используемых в поле text.
В данном случае можно указать анализатор поиска, который генерирует один токен, а не набор префиксов:
[ appli ]
Этот токен строки запроса будет соответствовать только токенам слов, начинающихся с appli, что лучше соответствует ожиданиям пользователя от поиска.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/analysis-index-search-time.html