在ES的版本升级,容器迁移等情况下,免不了进行数据迁移,如何不用前代码就实现ES的数据迁移呢:
一、同一集群内,索引间的数据迁移
{
"conflicts": "proceed", #跳过异常
"source": {
"index": "seo_article", #数据源索引
"size": 5000, #每次迁移数量,可以没有
},
"dest": {
"index": "seo_article", #目标索引
"version_type": "internal",
"op_type": "create"
}
}
二、跨集群数据迁移
1、先要在目标集群白名单内配置数据源集群信息,否则网络不通
新的集群elasticsearch.yml文件中添加如下配置:配置完成后可能需要重启集群
reindex.remote.whitelist: ["172.28.234.50:40000"]
2、在目标集群执行命令
请求:http://11.115.235.225:40000/_reindex?wait_for_completion=false
body:
{
"conflicts": "proceed", #跳过异常
"source": {
"index": "seo_article", #数据源索引
"size": 5000, #每次迁移数量,可以没有
"remote": {
"host": "172.28.234.50:40000", #数据源的集群信息
"socket_timeout": "1m",
"connect_timeout": "10s"
}
},
"dest": {
"index": "seo_article", #目标索引
"version_type": "internal",
"op_type": "create"
}
}
三、根据条件进行数据迁移(跨集群需要配置白名单)
{
"conflicts": "proceed", #跳过异常
"source": {
"index": "seo_article", #数据源索引
"size": 5000, #每次迁移数量,可以没有
"query": { #迁移数据的条件过滤(这里我指定最近一个月创建的)
"range": {
"createTime": {
"gte": "now-30d/d"
}
}
},
"remote": {
"host": "172.28.234.50:40000", #数据源的集群信息
"socket_timeout": "1m",
"connect_timeout": "10s"
}
},
"dest": {
"index": "seo_article", #目标索引
"version_type": "internal",
"op_type": "create"
}
}