elasticsearch(10)重建索引
阿新 • • 發佈:2018-11-16
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'"
}
}