跳到主要内容

索引复制 reindex

Reindex

复制一个索引到另一个索引

重要
  1. 源索引必须启用 _source
  2. Reindex 不会复制源索引的设置。在运行_reindex操作之前,应该先创建目标索引,设置与源索引对等的settings、mappings。
POST _reindex
{
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter"
}
}

version_type 参数(可选)

如果新的index中有数据,并且可能发生冲突,那么可以设置version_type来控制:

POST _reindex
{
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter",
"version_type": "internal"
}
}
  • internal: 强制更新,强制性的将文档转储到目标中,覆盖具有相同类型和ID的任何内容。
  • external: 保留最新版本,只有当源索引的数据 version 比目标索引的数据 version 高的时候,才会去更新。

query 参数(可选)

通过query指定部分数据复制。

POST _reindex
{
"source": {
"index": "twitter",
"type": "_doc",
"query": {
"term": {
"user": "kimchy"
}
}
},
"dest": {
"index": "new_twitter"
}
}

多对一复制

从多个源索引复制到目标索引

POST _reindex
{
"source": {
"index": ["twitter", "blog"],
"type": ["_doc", "post"]
},
"dest": {
"index": "all_together",
"type": "_doc"
}
}

size

通过设置size来限制复制文档的数量

POST _reindex
{
"size": 1,
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter"
}
}

使用排序

排序会降低复制的效率,但在某些情况下,这是值得的。例如复制时间较近的文档。

POST _reindex
{
"size": 10000,
"source": {
"index": "twitter",
"sort": { "date": "desc" }
},
"dest": {
"index": "new_twitter"
}
}