作者:fyupeng
技术专栏:☞ https://github.com/fyupeng
项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api
项目预览地址:☞ 预览
在日常开发与业务迭代过程中,索引结构的调整是 Elasticsearch 应用场景中非常常见的需求 ------ 随着业务需求的更新(比如字段新增 / 类型调整、分词规则优化、数据结构适配业务逻辑变更等),原有 ES 索引的 Mapping/Settings 配置往往无法满足新的业务诉求。而 ES 本身不支持直接修改已创建索引的核心配置(如字段类型、分词器),因此索引重建就成为解决这类问题的核心方案。
回归正题,索引重建主要包括这几步:数据备份与迁移、旧索引清理与新索引重建、数据回迁与验证和业务切换。这里为了方便,业务切换采取的服务重启自动重建索引。
第一步:拷贝源索引上的数据 到 临时索引上
cmd
curl -XPOST "http://localhost:9200/_reindex" -H "Content-Type: application/json; charset=UTF-8" -d "{\"source\":{\"index\":\"scs-ckp-task-2026\"},\"dest\":{\"index\":\"scs-ckp-task-2026-copy\"},\"max_docs\":100000}"
第二步:验证临时索引是否创建,数据是否与原数据一致
cmd
# 原索引数据计数
curl -XGET "http://localhost:9200/scs-ckp-task-2026/_count"
cmd
# 临时索引数据计数
curl -XGET "http://localhost:9200/scs-ckp-task-2026-copy/_count"
# 返回成功结果示例:{"count":28675,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}
第三步:删除原索引(谨慎操作,临时索引要保留,为了重建索引)
cmd
curl -XDELETE "http://localhost:9200/scs-ckp-task-2026"
# 返回成功结果示例: {"acknowledged":true}
第四步:波塞冬重新部署 SCS 服务
cmd
# 保证执行以下命令能查询出结果
curl -XGET "http://localhost:9200/scs-ckp-task-2026/_count"
# 返回成功结果示例:{"count":0,"_shards":{"total":3,"successful":3,"skipped":0,"failed":0}}
第五步:临时索引把数据重新复制回新索引
cmd
curl -XPOST "http://localhost:9200/_reindex" -H "Content-Type: application/json; charset=UTF-8" -d "{\"source\":{\"index\":\"scs-ckp-task-2026-copy\"},\"dest\":{\"index\":\"scs-ckp-task-2026\"},\"max_docs\":100000}"