在使用es的过程中,有时候不小心在查询的时候应该使用Get操作,却使用了POST操作,这就会导致es的mapping里面多出一个无用的字段。或者在未定义字段类型时提交了新的数据字段,就会导致字段类型与预期的不一致,从而造成许多麻烦。
es是不支持删除单个字段的,尽管可以删除单个字段的所有数据,但是这个字段依然存在mapping声明中无法删除,这时候es的reindex api就该上场了,堪称救火神器!
基本用法
reindex的最基本形式只是将文档从一个索引复制到另一个索引,例如:
POST _reindex
{
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter"
}
}
上面操作会把twitter的数据复制一份到new_twitter中。
更新或创建新纪录
还可以这样使用:
POST _reindex
{
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter",
"version_type": "external"
}
}
以上代码会从源保留版本,创建缺少的任何文档,并更新目标索引中具有旧版本的文档。
只创建新纪录
如果只是想单纯创建不存在的记录,可以:
POST _reindex
{
"conflicts": "proceed",
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter",
"op_type": "create"
}
}

当Elasticsearch中出现错误字段或类型不一致时,reindex API成为救火神器。它能复制索引、更新或创建新纪录,甚至进行远程数据迁移。通过指定_source操作,可以修正字段类型,配合别名实现无缝切换。在reindex过程中,可调整参数如wait_for_completion和requests_per_second以优化操作。
最低0.47元/天 解锁文章
886

被折叠的 条评论
为什么被折叠?



