如何在Elasticsearch中批量仅更新指定字段?
Elasticsearch批量更新文档指定字段的正确方式
你之前使用的批量请求采用的是默认的index操作,这种操作会直接覆盖整个文档,导致未指定的原有字段被删除。要实现仅更新指定字段、保留其余字段的需求,需要改用update操作,并通过doc字段定义要修改的内容。
正确的批量更新请求示例
{"update": {"_index": "post_en", "_id": "966156"}} {"doc": {"status": 2}} {"update": {"_index": "post_en", "_id": "966157"}} {"doc": {"title": "some title", "status": 1}}
关键说明
- 每一组两行数据对应一个更新操作:第一行指定操作类型(
update)、目标索引名和文档ID;第二行的doc对象仅包含需要更新的字段。 - Elasticsearch会仅修改
doc中定义的字段,文档中未提及的原有字段会完整保留。 - 如果需要处理文档可能不存在的场景,可以在
update操作中添加doc_as_upsert: true参数,当文档不存在时,会自动用doc中的内容创建新文档:
{"update": {"_index": "post_en", "_id": "966158", "doc_as_upsert": true}} {"doc": {"title": "new post", "status": 1}}
内容的提问来源于stack exchange,提问作者Arth Tilva
相关产品推荐
相关产品推荐

