问题
我有时候,需要调试一个已经存在的ES索引,需要从已有的索引复制数据到新的索引中去。
解决
这里我借助一个GUI工具,来解决这个问题,底层它是使用Reindex的API实现索引数据复制的。利用Reindex API搞不定这个事情,原索引mapping结构不会被复制。
# 步骤
选中已存在的redix菜单,准备开始负责索引数据,如下图:
输入将要新建的索引名,开始索引复制,如下图:
开始索引数据复制,如下图:
等待一段时间,就可以完成索引复制了。
# 检查
利用count的api检查一下文档的数量,看看是否都复制完了。如下图:
通过检查新旧两个索引的文档总数,可以知道我们复制基本成功了。
总结
有个Elasticsearch的GUI程序还是挺方便的。虽然,利用Elasticvue工具看似是把数据复制过来了,但是,新生的索引,与旧的索引的mapping结构并不一致,后面利用clone API进行索引复制。
Clone API进行索引复制
PUT old_index/_settings
{"settings": {"index.blocks.write": false}
}
阻塞旧索引写,准备开始克隆旧索引:
POST old_index/_clone/new_index
这样利用clone api,不仅把文档数据复制了一份,而且,还把旧索引mapping结构复制一份给新索引。
参考:
- elasticvue
- Reindex API
- Count API
- Clone index API