背景
- Elasticsearch是一个高扩展的开源全文搜索和分析引擎,它允许存储、搜索和分析大量的数据。
- ES 的索引创建之后的 mapping 结构是不能够修改的,如果系统中的 ES 索引没有使用别名指向真正的索引,那么要达到增删mapping字段的需求,就需要对索引进行重建。
方案
流程图

打开临时索引
- 在系统中定义开关,读取外部配置文件,当开关置为 true 时,所有数据将交给临时索引保存,也就是index_temp 进行处理。
- 在index_temp接收数据的过程中,index_old依旧可以提供查询服务,但是之前程序如果使用的是index_old查询的话,会造成新添加进 index_temp 的数据不可查询
拷贝数据
- 将index_old的数据拷贝到index_new中
ReindexAction.INSTANCE
.newRequestBuilder(elasticsearchTemplate.getClient())
.source("index_old")
.destination("index_new")
.get();
删除老索引&建立别名
- 目前index_old中的数据已经全部拷贝到index_new中了,现在就要把index_old删掉,建立index_old的别名指向index_new,也就是说将 index_old 删掉,再建立名叫index_old的别名指向 index_new, 此时index_old 和 index_new 都能提供服务
if (elasticsearchTemplate.indexExists("index_old"))