使用场景
- 一般在一下几种情况时,我们需要重建索引
- 索引的Mappings发生变更:字段类型改变,分词器及字典更新
- 索引的Settings发生变更:索引的主分片数发生改变
- 集群内,集群间需要做数据迁移
- Elasticsearch的内置提供的API
- Update By Query:在现有索引上重建
- Reindex:在其他索引上重建索引
案例1:为索引增加子字段
- 改变mapping,增加子字段,使用英文分词器
- 此时尝试对子字段进行查询
- 虽然数据已经存在,但是没有返回结果
变更前的数据无法查询出来,之后插入的索引可以被查询出来
经此操作之后,mapping变更之前的索引也都可以查询出来了
案例2:更改以后字段类型的Mappings
- ES不允许在原有Mapping上对字段类型进行修改
- 只能创建新的索引,并且设定正确的字段类型,再重新导入数据
发现对已存在字段变更mapping无法进行,这里可以采用新建索引,reindex来达成
Reindex API
- Reindex API支持把文档从一个索引拷贝到另外一个索引
- 使用Reindex API的一些场景
- 修改索引的主分片数
- 改变字段的Mapping中的字段类型
- 集群内数据迁移 / 跨集群的数据迁移
- 使用注意:
- 索引的_source处理enable状态
- 需提前创建好索引,以及指定好mapping以及setting
OP Type
- 使用op_type为create,reindex只会创建目标索引中不存在的文档
- 文档如果已经存在,会导致版本冲突
跨集群ReIndex
reindex.remote.whitelist:"otherhost:9200,another:9200"
-
需修改elasticsearch.yml 并重启节点
查看Task API
- reindex api支持异步操作,执行只返回TaskId
- POST _reindex?wait_for_completion=false
GET _tasks?detailed=true&actions=reindex