索引重建场景
- 索引的mappings发生变更:字段类型更改,分词器及字典更新
- 索引settings发生变更:索引主分片数发生改变
-
内置API
Update By Query
Reindex
在其他索引上重建索引,支持把文档从一个索引拷贝到另一个索引
- 使用场景
- 修改索引的主分片数
- 改变字段的Mapping中字段类型
- 集群内数据迁移/跨集群的数据迁移
案例1:为索引增加子字段
``` // 1.mapping修改 put blogs/_mapping { “properties”:{ “content”:{ “type”:”text”, “field”:{
} } } } } // 2.查询,mapping修改前的数据查询不到,修改后的可以查询到 post blogs/_search { “query”:{ “match”:{ “content.english”:”Hadoop” } } } // update_by_query,mapping修改前的数据也可查询到 post blogs/_update_by_query{}"english":{
"type":"text",
"analyzer":"english"
<a name="9Iek1"></a>
#### 案例2:更改已有字段类型的Mappings
- ES不允许在原有Mapping上对字段类型进行修改
- 只能创建新的索引,并且设定正确的字段类型,再重新导入数据
// Reindex API 把旧索引中的数据导入到新索引中 post _reindex { “source”:{ “index”:”blogs” }, “dest”:{ “index”:”blogs_fix” } }
// op_type,目标索引中不存在的文档才索引,避免版本冲突 post _reindex { “source”:{ “index”:”user” }, “dest”:{ “index”:”user2”, “op_type”:”create” } } // 跨集群reindex
- 修改elasticsearch.yml(reindex.remote.whitelist:”otherhost:9200,another:9200”),并重启节点
- post _reindex
{
“source”:{
}, “index”:”source”, “size”:100, “query”:{"remote":{
"host":"http://otherhost:9200"
} }, “dest”:{"match":{
"test":"data"
}
} } // reindex异步操作:Task API"index":"dest"
- post _index?wait_for_completion=fasle
- 使用1返回的task id查看任务信息 get _tasks?detailed=true&actions=*reindex ```