Elasticsearch重索引时自定义ID并新增数据解决冲突问题问询
Elasticsearch重索引冲突问题解决方案
你当前执行重索引报错的核心原因是配置了"op_type": "create",该参数要求只有目标索引中不存在和源文档同ID的文档时,才会执行写入操作。多次对同一批源数据执行重索引时,源文档ID没有变化,就会触发版本冲突报错。
通过重索引时修改文档ID的方式完全可以解决该问题,非常适配你需要同一份数据对应不同项目名的场景,修改后不同项目对应的文档ID唯一,不会出现ID重复导致的冲突。
你可以参考修改后的重索引语句,将项目名作为前缀/后缀拼到原有文档ID上,保证不同项目的ID不重复:
{ "source": { "index": "demodata" }, "dest": { "index": "new_twitter", "op_type": "create" }, "script": { "source": "ctx._source['project'] = 'Personal3';ctx._id = 'Personal3_' + ctx._id;", "lang": "painless" } }
如果你不想修改文档ID,也可以通过以下配置实现需求:
- 新增
"conflicts": "proceed"配置,直接跳过冲突的文档,仅写入目标索引中不存在的新文档 - 移除
"op_type": "create"配置,使用默认覆盖模式写入,相同ID的旧文档会被新内容直接覆盖
内容的提问来源于stack exchange,提问作者Janny
相关产品推荐
相关产品推荐

