Elasticsearch.Nest 教程系列 5-2 索引:Ingest Node | 使用 Ingest 节点
本系列博文是“伪”官方文档翻译(更加本土化),并非完全将官方文档进行翻译,而是在查阅、测试原始文档并转换为自己真知灼见后的“准”翻译。有不同见解 / 说明不周的地方,还请海涵、不吝拍砖 :)
官方文档见此:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/introduction.html
本系列对应的版本环境:ElasticSearch@7.3.1,NEST@7.3.1,IDE 和开发平台默认为 VS2019,.NET CORE 2.1
Ingest Node 的作用
在文档索引发生之前,会使用 Ingest 节点进行预处理文档。Ingest 节点会拦截批量和索引请求,之后应用转换(mapping),然后将文档传递回索引或 Bulk API。
-
即:在数据被索引之前,通过预定义好的处理管道对数据进行预处理。
默认情况下,所有节点都启用 Ingest,也就是说任何节点都可以处理 Ingest 任务。
-
当然,你也可以创建某些业务专用的 Ingest 节点。
Elasticsearch 会将自动将索引请求重新路由到 Ingest 节点,而您可以优化此路径。
自定义索引客户端
在声明 ES 客户端的时候,你不需要制定或配置任何信息,ES 会自动将接收到的请求重新路由到 Ingest 节点。
如果您要进行大量 Ingest 相关的操作并拥有专用的 Ingest 节点,你可以直接将索引请求发送到这些节点,以避免集群中的任何额外跃点。
最简单的方法是为索引请求创建一个专用的 ES 客户端:
1 | var pool = new StaticConnectionPool(new [] //Ingest 节点集合 |
Ingest 能干什么
在复杂的集群配置中,使用 SniffingConnectionPool 以及节点谓词来筛选具有 Ingest 功能的节点会更容易。它允许你可以自定义群集,而不必重新配置客户端。
1 | var pool = new SniffingConnectionPool(new [] // 集群节点集合 |
-
在使用 ES 客户端的时候,会只选择具有 Ingest 功能的节点。