数据丰富
编辑数据丰富
编辑ES|QL 的 ENRICH
处理命令在查询时将来自一个或多个源索引的数据与在 Elasticsearch 富化索引中找到的字段值组合结合起来。
例如,您可以使用 ENRICH
来:
- 根据已知的 IP 地址识别 Web 服务或供应商
- 根据产品 ID 将产品信息添加到零售订单中
- 根据电子邮件地址补充联系信息
ENRICH
命令的工作原理
编辑ENRICH
命令使用 Elasticsearch 索引中的数据向表中添加新列。它需要一些特殊的组件:
- 源索引
- 一个存储富化数据的索引,
ENRICH
命令可以将其添加到输入表中。您可以像管理常规 Elasticsearch 索引一样创建和管理这些索引。您可以在一个富化策略中使用多个源索引。您也可以在多个富化策略中使用相同的源索引。
- 富化索引
-
与特定富化策略绑定的特殊系统索引。
直接将输入表中的行与源索引中的文档匹配可能会很慢且资源密集。为了加快速度,
ENRICH
命令使用富化索引。富化索引包含来自源索引的富化数据,但具有一些特殊的属性来帮助简化它们:
- 它们是系统索引,这意味着它们由 Elasticsearch 内部管理,仅用于富化处理器和 ES|QL
ENRICH
命令。 - 它们始终以
.enrich-*
开头。 - 它们是只读的,这意味着您无法直接更改它们。
- 它们已强制合并,以便快速检索。
- 它们是系统索引,这意味着它们由 Elasticsearch 内部管理,仅用于富化处理器和 ES|QL
设置富化策略
编辑要开始使用 ENRICH
,请按照以下步骤操作:
ENRICH
命令执行多个操作,可能会影响查询速度。
前提条件
编辑要使用富化策略,您必须拥有:
-
对任何使用的索引具有
read
索引权限 enrich_user
内置角色
添加富化数据
编辑首先,将文档添加到一个或多个源索引中。这些文档应包含您最终想要添加到传入数据的富化数据。
您可以使用文档和索引API 来管理源索引,就像管理常规 Elasticsearch 索引一样。
您还可以设置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
命令仅支持类型为 match
的富化策略。此外,ENRICH
仅支持丰富类型为 keyword
的列。