ES对于已存在的索引字段无法修改,如果要修改索引结构,可以通过新建一个修改结构后的新索引,然后将旧索引中的数据复制到新索引中,变相实现修改索引。
配合索引别名可以实现无缝修改索引结构。
PUT /my_index_v1/_alias/my_index
示例:将testindex索引下的数据复制到testindex2索引下。默认配置下,对于type和id相同的文档直接覆盖处理。
POST /_reindex
{
"source": {
"index": "testindex"
},
"dest": {
"index": "testindex2"
}
}
version_type
可以指定参数version_type
为external
:
- 当源索引文档不存在于目标索引,创建文档
- 当源索引文档存在于目标索引且源索引文档版本高于目标索引文档,更新文档
- 当源索引文档存在于目标索引且源索引文档版本等于或低于目标索引文档,该文档冲突不更新
当参数version_type
为internal
(默认)时,源索引所有文档创建覆盖。
POST /_reindex
{
"source": {
"index": "testindex"
},
"dest": {
"index": "testindex2",
"version_type": "external | internal"
}
}
op_type
当指定参数op_type
为create
时,_reindex
操作只会将目标索引中不存在的文档创建过去,而目标索引中已存在的文档无论版本高低,文档冲突不更新。
POST /_reindex
{
"source": {
"index": "testindex"
},
"dest": {
"index": "testindex2",
"op_type": "create"
}
}
query
_reindex
操作可以增加查询和type
限制文档的数量,也可以从多个索引下复制文档到指定索引。
POST /_reindex
{
"source": {
"index": ["testindex"],
"type": ["testtype"],
"query": {
"match_all": {}
}
},
"dest": {
"index": "testindex2"
}
}
sort
_reindex
支持选择性复制指定的文档数量和排序。
POST /_reindex
{
"size": 10,
"source": {
"index": "testindex",
"sort": {
"name": "asc"
}
},
"dest": {
"index": "testindex2"
}
}
script
_reindex
支持使用脚本修改文档。
POST /_reindex
{
"source": {
"index": "testindex"
},
"dest": {
"index": "testindex2"
},
"script": {
"inline": "ctx._source.name = ctx._source.name + 'v2'"
}
}