Обогащение данных
Команда обработки ES|QL ENRICH объединяет данные из одного или нескольких исходных индексов с комбинациями значений полей, найденными в обогащённых индексах Elasticsearch.
Например, вы можете использовать ENRICH для:
- Определения веб-сервисов или поставщиков на основе известных IP-адресов
- Добавления информации о продукте к розничным заказам на основе идентификаторов продуктов
- Дополнения контактной информации на основе адреса электронной почты
Как работает команда ENRICH
Команда ENRICH добавляет новые столбцы в таблицу с данными из индексов Elasticsearch. Для этого требуются несколько специальных компонентов:
- Политика обогащения
-
Набор параметров конфигурации, используемых для добавления необходимых данных обогащения в входную таблицу.
Политика обогащения содержит:
- Список одного или нескольких исходных индексов, в которых данные обогащения хранятся как документы
- Тип политики, определяющий, как процессор сопоставляет данные обогащения с входными документами
- Поле сопоставления из исходных индексов, используемое для сопоставления входных документов
- Поля обогащения, содержащие данные обогащения из исходных индексов, которые вы хотите добавить к входным документам
После создания политики, она должна быть выполнена, прежде чем её можно будет использовать. Выполнение политики обогащения использует данные из исходных индексов политики для создания оптимизированного системного индекса, называемого индексом обогащения. Команда
ENRICHиспользует этот индекс для сопоставления и обогащения входной таблицы.
- Исходный индекс
- Индекс, в котором хранятся данные обогащения, которые команда
ENRICHможет добавить к входным таблицам. Вы можете создавать и управлять этими индексами так же, как и обычным индексом Elasticsearch. В политике обогащения можно использовать несколько исходных индексов. Также вы можете использовать один и тот же исходный индекс в нескольких политиках обогащения.
- Индекс обогащения
-
Специальный системный индекс, связанный с конкретной политикой обогащения.
Прямое сопоставление строк из входных таблиц с документами в исходных индексах может быть медленным и ресурсоёмким. Чтобы ускорить процесс, команда
ENRICHиспользует индекс обогащения.Индексы обогащения содержат данные обогащения из исходных индексов, но имеют несколько специальных свойств, помогающих их оптимизировать:
- Это системные индексы, что означает, что они управляются внутри Elasticsearch и предназначены только для использования с процессорами обогащения и командой ES|QL
ENRICH. - Они всегда начинаются с
.enrich-*. - Они являются только для чтения, что означает, что вы не можете их напрямую изменять.
- Они сливаются принудительно для быстрого извлечения.
- Это системные индексы, что означает, что они управляются внутри Elasticsearch и предназначены только для использования с процессорами обогащения и командой ES|QL
Настройка политики обогащения
Для начала использования ENRICH, выполните следующие шаги:
После настройки политик обогащения, вы можете обновить свои данные обогащения и обновить свои политики обогащения.
Команда ENRICH выполняет несколько операций и может повлиять на скорость запроса.
Предварительные условия
Для использования политик обогащения у вас должны быть:
- Права доступа к индексу
readдля всех используемых индексов - Встроенная роль
enrich_userвстроенная роль
Добавление данных обогащения
Для начала добавьте документы в один или несколько исходных индексов. Эти документы должны содержать данные обогащения, которые вы в конечном итоге хотите добавить к поступающим данным.
Вы можете управлять исходными индексами так же, как обычными индексами Elasticsearch, используя API документов и индексов.
Также можно настроить Beats, такие как Filebeat, для автоматической отправки и индексирования документов в ваши исходные индексы. Смотрите Начало работы с Beats.
Создание политики обогащения
После добавления данных обогащения в ваши исходные индексы, используйте API создания политики обогащения или Управление индексами в Kibana для создания политики обогащения.
После создания политику обогащения нельзя обновлять или изменять. Смотрите Обновление политики обогащения.
Выполнение политики обогащения
После создания политики обогащения, вам необходимо выполнить её с помощью API выполнения политики обогащения или Управление индексами в Kibana для создания индекса обогащения.
Индекс обогащения содержит документы из исходных индексов политики. Индексы обогащения всегда начинаются с .enrich-*, являются только для чтения и сливаются принудительно.
Индексы обогащения должны использоваться только процессором обогащения или командой ES|QL ENRICH. Избегайте использования индексов обогащения для других целей.
Использование политики обогащения
После выполнения политики вы можете использовать ENRICH команду для обогащения данных.
Следующий пример использует политику обогащения languages_policy для добавления нового столбца для каждого поля обогащения, определённого в политике. Сопоставление выполняется с использованием match_field, определённого в политике обогащения, и требует, чтобы входная таблица имела столбец с таким же именем (language_code в этом примере). ENRICH будет искать записи в индексе обогащения на основе значения поля сопоставления.
ROW language_code = "1" | ENRICH languages_policy
| language_code:keyword | language_name:keyword |
|---|---|
1 | English |
Для использования столбца с другим именем, чем match_field, определённое в политике как поле сопоставления, используйте ON <column-name>:
ROW a = "1" | ENRICH languages_policy ON a
| a:keyword | language_name:keyword |
|---|---|
1 | English |
По умолчанию каждое из полей обогащения, определённых в политике, добавляется как столбец. Для явного выбора полей обогащения, которые нужно добавить, используйте WITH <field1>, <field2>, ...:
ROW a = "1" | ENRICH languages_policy ON a WITH language_name
| a:keyword | language_name:keyword |
|---|---|
1 | English |
Можно переименовать добавленные столбцы, используя WITH new_name=<field1>:
ROW a = "1" | ENRICH languages_policy ON a WITH name = language_name
| a:keyword | name:keyword |
|---|---|
1 | English |
В случае коллизий имён, вновь созданные столбцы переопределят существующие.
Обновить индекс обогащения
После создания вы не можете обновлять или индексировать документы в индексе обогащения. Вместо этого обновите исходные индексы и выполните политику обогащения еще раз. Это создаст новый индекс обогащения из обновленных исходных индексов. Предыдущий индекс обогащения будет удален задачей по техническому обслуживанию с задержкой. По умолчанию это выполняется каждые 15 минут.
Обновить политику обогащения
После создания вы не можете обновлять или изменять политику обогащения. Вместо этого вы можете:
- Создать и выполнить новую политику обогащения.
- Заменить предыдущую политику обогащения новой политикой во всех используемых процессорах обогащения или запросах ES|QL.
- Используйте API удаления политики обогащения или Управление индексами в Kibana для удаления предыдущей политики обогащения.
Типы и ограничения политик обогащения
Команда ES|QL ENRICH поддерживает все три типа политик обогащения:
-
geo_match - Сопоставляет данные обогащения с поступающими документами на основе
geo_shapeзапроса. Пример см. в Примере: Обогащение данных на основе геолокации. -
match - Сопоставляет данные обогащения с поступающими документами на основе
termзапроса. Пример см. в Примере: Обогащение данных на основе точных значений. -
range - Сопоставляет число, дату или IP-адрес в поступающих документах с диапазоном в индексе обогащения на основе
termзапроса. Пример см. в Примере: Обогащение данных путем сопоставления значения с диапазоном.
Хотя все три типа политик обогащения поддерживаются, следует учитывать некоторые ограничения:
- Тип политики обогащения
geo_matchподдерживает только пространственное отношениеintersects. - Требуется, чтобы
match_fieldв командеENRICHбыл правильного типа. Например, если политика обогащения имеет типgeo_match, тоmatch_fieldв командеENRICHдолжна быть типаgeo_pointилиgeo_shape. Аналогично, политика обогащения типаrangeтребуетmatch_fieldтипаinteger,long,dateилиip, в зависимости от типа поля диапазона в исходном индексе обогащения. - Однако это ограничение смягчается для политик
range, когдаmatch_fieldимеет типKEYWORD. В этом случае значения поля будут анализироваться во время выполнения запроса, строка за строкой. Если какое-либо значение не удастся проанализировать, выходные значения для этой строки будут установлены вnull, будет выведено соответствующее предупреждение, и запрос продолжит выполняться.
© 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/8.17/esql-enrich-data.html