ES在创建好索引后,mapping的properties属性类型是不能更改的,只能添加。
如果说需要修改字段就需要重新建立索引然后把旧数据导到新索引。
1、当你的数据量过大,而你的索引最初创建的分片数量不足,导致数据入库较慢的情况,此时需要扩大分片的数量,此时可以尝试使用Reindex。
2、当数据的mapping需要修改,但是大量的数据已经导入到索引中了,重新导入数据到新的索引太耗时;但是在ES中,一个字段的mapping在定义并且导入数据之后是不能再修改的,所以这种情况下也可以考虑尝试使用Reindex。
5.X版本后新增_reindex API 。
Reindex可以直接在Elasticsearch集群里面对数据进行重建,并且支持跨集群间的数据迁移。
相对于我们重新导入数据肯定会快不少,实测速度大概是bulk导入数据的5-10倍。
当我们做统计群或者跨集群reindex时,提前创建好目标索引非常重要!
为什么这么说?
因为一开始,在备份数据的场景下,以为dest index不用创建,最后测试发现如果dest index不创建,对于非text类型数据,可能会变成text类型(不建议这样做,所以最好创建好dest index)。
reindex官方文档
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html
干货 | Elasticsearch Reindex性能提升10倍+实战
https://blog.csdn.net/laoyang360/article/details/81589459
ElasticSearch - Reindexing your data with zero downtime
https://stackoverflow.com/questions/29508955/elasticsearch-reindexing-your-data-with-zero-downtime
ES数据库重建索引——Reindex(数据迁移)
https://www.cnblogs.com/Ace-suiyuan008/p/9985249.html
Changing Mapping with Zero Downtime
https://www.elastic.co/cn/blog/changing-mapping-with-zero-downtime
网友评论