如何指定Elasticsearch的ingest pipeline?除查询参数外还有其他使用方式吗?
这不是索引文档时使用ingest pipeline的唯一方式,你提到的在索引请求查询参数中指定pipeline=xxx的方式是单次请求临时指定的常用方案,除此之外还有以下4种常见用法:
为索引设置默认pipeline
可以给单个索引配置index.default_pipeline参数,配置完成后所有写入该索引的请求,如果没有显式指定pipeline参数,会自动执行该默认pipeline。如果请求中显式指定了pipeline,会覆盖该默认配置。
配置示例:PUT /my_index/_settings { "index.default_pipeline": "my_default_pipeline" }为索引设置强制最终pipeline
可以给索引配置index.final_pipeline参数,该pipeline的执行优先级最高,不受请求参数的影响:无论请求中有没有指定pipeline,也无论索引有没有配置默认pipeline,在所有其他pipeline执行完成后,都会自动执行该最终pipeline。通常用于全量数据强制脱敏、加统一标识等必须执行的处理逻辑。
配置示例:PUT /my_index/_settings { "index.final_pipeline": "mandatory_process_pipeline" }批量请求中单独指定pipeline
使用_bulk批量写入API时,既可以在整个批量请求的查询参数中指定统一的pipeline,也可以在单条写入动作的元数据中为不同文档指定独立的pipeline,满足批量写入时不同数据走不同处理逻辑的需求。
单条指定示例:POST _bulk { "index" : { "_index" : "my_index", "_id" : "1", "pipeline" : "pipeline_for_doc1" } } { "content": "测试数据1" } { "index" : { "_index" : "my_index", "_id" : "2", "pipeline" : "pipeline_for_doc2" } } { "content": "测试数据2" }Reindex时指定pipeline做数据转换
使用_reindexAPI做数据迁移、索引重建时,可以在目标索引配置项中指定pipeline,对旧索引同步过来的所有数据做统一处理后再写入新索引。
示例:POST _reindex { "source": { "index": "old_index" }, "dest": { "index": "new_index", "pipeline": "data_transform_pipeline" } }
不同pipeline的执行优先级
- 优先执行请求中显式指定的pipeline,请求未指定时执行索引的默认pipeline(如果配置了)
- 上述pipeline执行完成后,强制执行索引的最终pipeline(如果配置了)
内容的提问来源于stack exchange,提问作者huha
相关产品推荐
相关产品推荐

