官方文档-丰富你的数据(Enrich)
对应7.16官方文档路径: Ingest pipelines » Enrich your data
官方地址如下:
https://www.elastic.co/guide/en/elasticsearch/reference/7.16/ingest-enriching-data.html
注:enrich 为 pipeline processor 的一种,主要作用是将现有索引数据加入到你传入的文档中。
Enrich 你的数据
你可以使用 enrich processor 在 ingest 阶段将现存索引的数据添加到要传入的文档中。
例如,你可以使用 enrich processor 做到:
- 根据已知 IP 地址识别 Web 服务或供应商
- 根据产品 ID 将产品信息添加到零售订单
- 根据 email 地址补充联系方式
- 根据用户坐标添加邮政编码
enrich processor 如何工作
大多数的 processors 是独立工作的,只作用于要传入的文档数据,如下图所示:
processor 只处理索引的数据
Enrich processor 通过一些特殊的组件向传入的文档中添加数据,如下图所示:
向索引的文档中添加存在的数据
enrich policy
一组用于将正确的 enrich data 添加到正确的要传入文档中的配置选项。
enrich policy 包含:
- 包含一个或多个 source indices 的列表,他们的文档将作为 enrich data
- policy type,决定 processor 如何将 enrich data 和要传入的文档匹配
- source indices 用来与要传入的文档匹配的字段
- 要添加到要传入的文档中的 enrich 字段,它包含来自 source indices 的 enrich data
在 enrich policy 被用于 enrich processor 之前,必须先执行 executed
。在 executed 时,enrich policy 使用 policy 配置的 source indices 的 enrich data 创建一个简化的系统索引,称为 enrich index。processor 使用此索引来匹配和丰富传入的文档。
source index
存储你想要添加到传入文档的 enrich data 的索引。你可以像创建和管理常规 ES 索引一样操作这些索引。你可以在 enrich policy 中使用多个 source indices。你还可以在多个 enrich policy 中使用相同的 source index。
enrich index
与特定 enrich policy 相关的特殊系统索引。
直接将传入文档与 source index 中的文档进行匹配可能会很慢且需要大量资源。为了加快速度,enrich processor 使用 enrich index。
- 它们是系统索引,这意味着它们由 ES 内部管理,仅用于 enrich processors
- 它们名字以
.enrich-*
开头 - 它们是只读的,意味着你不能直接修改它们
- 它们会被 force merged 一遍快速检索
1 设置一个 enrich processor
设置一个 enrich processor 需要一下步骤:
- 检查先决条件
- 添加 enrich data
- 创建 enrich policy
- 执行 enrich policy
- 将 enrich processor 添加到 ingest pipeline
- ingest 并 enrich 传入的文档
设置 enrich processor 后,你可以更新你的 enrich data 和 enrich policies。
注:enrich processor 执行多个操作,会影响 ingest pipeline 的速度;在部署到生产环境之前在测试环境对其进行基准测试;不建议使用 enrich processor 追加实时数据,它适合用于不经常修改的基准数据。
1.1 先决条件
如果你开启了 ES 的安全功能,你必须具备一下权限:
- 会用到的索引的 read 权限
- 内置 role 当中的 enrich_user
1.2 添加 enrich data
首先,添加文档到一个或者多个 source indices,这些文档需要包含你最终想要添加到传入文档的 enrich data。
你可以想操作正常 ES 索引一样操作 source indices。
1.3 创建 enrich policy
添加 enrich data 到 source indices 之后,使用 create enrich policy API 创建 enrich policy。
注:创建后,不可以更新或者修改 enrich policy
1.4 执行 enrich policy
创建 enrich policy 之后,你可以使用 execute enrich policy API 执行它并创建 enrich index,如下图所示:
Enrich index 包含来自 source indices 的文档,并以
.enrich-*
开头、只读、进行了 force merged。
注:Enrich indices 只能在 enrich processor 中使用,避免将其用于其他目的
1.5 将 enrich processor 添加到 ingest pipeline
当你具备了 source indices、enrich policy 和相关的 enrich index,你就可以设置一个包含 enrich processor 的 ingest pipeline ,如下图所示:
设置 pipeline 的 enrich processor
使用 create or update pipeline API 将 enrich processor 添加到 ingest pipeline中。
当你添加 enrich processor 时,你至少需要完成一下内容:
- 配置了 enrich policy
- 在你的 enrich index 中具备用来匹配要传入文档的字段
- 具备要添加到要传入文档的目标字段,此字段包含你的 enrich policy 中指定的匹配和丰富字段
你还可以使用max_matches
选项来设置传入文档可以匹配的 enrich documents 数量。如果设置为默认值1
,则数据将作为 JSON 对象添加到传入文档的目标字段。否则,数据将作为数组添加。
1.6 ingest 并 enrich 传入的文档
现在你可以使用 ingest pipeline 丰富并索引传入的文档。
enrich 处理流程
在生产中实施 pipeline 之前,我们建议先索引一些测试文档,验证是否正确添加了 enrich data。
1.7 更新 enrich index
一旦创建,你不能更新或索引文档到 enrich index,但你可以更新的你 source indices 并再次 execute 你的 enrich policy,这样会通过更新后的 source indices 创建一个新的 enrich index。之前的 enrich index 将随着延迟的维护作业被删除。默认情况下,此操作每 15 分钟执行一次。
如果需要,您可以使用 ingest pipeline reindex 或者 update 之前的问题数据。
1.8 更新 enrich policy
一旦创建,你不能在更新或修改 enrich policy,你可以:
- 创建并执行新的 enrich policy
- 使用新的 enrich policy 替换之前的 enrich policy
- 使用 delete enrich policy API 删除之前的 enrich policy
1.9 Enrich 组件
Enrich coordinator 用于管理和执行在每个 ingest 节点上丰富文档所需的搜索。它将所有 pipeline 中所有 enrich processors 的搜索组合成批量查询。
Enrich policy executor 是一个管理所有 enrich policies 执行的组件。当执行 enrich policy 时,该组件会创建一个新的 enrich index 并删除之前的 enrich index。Enrich policy executor 由选定的主节点管理。这些策略的执行发生在不同的节点上。
1.10 节点配置
Enrich processor 可以配置一些 node settings 作用于 enrich coordinator 和 enrich policy executor。
Enrich coordinator 支持以下 node settings:
-
enrich.cache_size
为 enrich docs 而缓存的最大搜索次数,默认为1000。集群中的所有 enrich processors 都有一个缓存,此设置确定该缓存的大小。 -
enrich.coordinator_proxy.max_concurrent_requests
Enriching docs 时运行 Multi Search 最大并发数,默认为8。 -
enrich.coordinator_proxy.max_lookups_per_request
Enriching docs 时 Multi Search 中的最大搜索次数,默认为128。
Enrich policy executor 支持以下 node settings:
-
enrich.fetch_size
将 source index reindex 为 enrich index 时的最大批量大小,默认为10000。 -
enrich.max_force_merge_attempts
Enrich index 上允许的最大 force merge 尝试次数,默认为3。 -
enrich.cleanup_period
ES 检查是否可以删除未使用的 enrich indices 的频率,默认为 15m。 -
enrich.max_concurrent_policy_executions
同时执行的最大 enrich policies 数,默认为50。