如何用_update_by_query API保留customID替换其余所有字段?
使用Elasticsearch _update_by_query API保留指定字段并替换其余内容
要实现保留customID字段、替换所有其他字段为replaced: true的需求,直接通过_update_by_query结合Painless脚本即可完成,核心是重新构建文档的_source对象。
具体请求示例
POST /你的索引名/_update_by_query { "script": { "source": """ ctx._source = [ 'customID': ctx._source.customID, 'replaced': true ] """, "lang": "painless" }, "query": { "exists": { "field": "customID" } } }
关键说明
- 脚本逻辑:通过重新赋值
ctx._source,直接覆盖原文档的所有内容,只保留原有的customID字段,同时添加replaced: true字段,原文档的其他字段会被完全清除。 - 查询条件:使用
exists查询确保只处理包含customID字段的文档,符合题目中所有目标文档都包含该字段的前提,也能避免误处理异常文档。
可选优化
- 替换请求中的
你的索引名为实际索引名称,支持多索引(用逗号分隔)或通配符匹配。 - 若处理大量文档,可添加
"scroll_size": 1000参数控制每次批量处理的文档数,优化性能。 - 执行前可添加
"dry_run": true进行测试,验证匹配的文档数量是否符合预期,避免误操作。
内容的提问来源于stack exchange,提问作者Daniel Sobrado
相关产品推荐
相关产品推荐

