如何使用Elasticsearch API合并同年度的payload.YYYY-MM索引
Elasticsearch v7.12.0 合并同年度索引实现方案
要将payload.YYYY-MM格式的月度索引合并为payload.YYYY年度索引,可通过Elasticsearch的_reindex API完成,以下是具体操作步骤:
1. 预创建目标年度索引(推荐)
为保证目标索引的mapping和settings与源索引一致,建议先基于某一个月度索引的配置创建年度索引:
# 获取月度索引的settings和mapping GET payload.2023-01/_settings,_mappings # 创建年度索引,填入上述获取到的配置 PUT payload.2023 { "settings": { # 粘贴获取到的settings内容 }, "mappings": { # 粘贴获取到的mappings内容 } }
2. 使用_reindex API迁移数据
针对每一年份,执行_reindex将该年度下所有月度索引的数据迁移到对应年度索引:
POST _reindex { "source": { "index": "payload.2023-*" # 匹配2023年所有月度索引 }, "dest": { "index": "payload.2023" # 目标年度索引 }, "conflicts": "proceed" # 遇到文档ID冲突时继续执行(可根据需求调整) }
异步执行(大数据量场景适用)
如果待迁移数据量较大,建议开启异步执行避免请求超时:
POST _reindex?wait_for_completion=false { "source": { "index": "payload.2023-*" }, "dest": { "index": "payload.2023" }, "conflicts": "proceed" }
执行后会返回任务ID,可通过以下命令查看迁移进度:
GET _tasks/{task_id}
3. 验证迁移结果
数据迁移完成后,对比源索引和目标索引的文档数,确认数据完整:
# 统计源索引总文档数 GET payload.2023-*/_count # 统计目标索引文档数 GET payload.2023/_count
4. 删除原月度索引
确认数据无误后,删除原有月度索引:
DELETE payload.2023-*
注意事项
- 迁移过程中若源索引仍有写入,建议暂停写入或通过
source.query过滤新增数据,避免遗漏。 - 多年度合并重复上述步骤即可。
内容的提问来源于stack exchange,提问作者Maxime Dousselaere
相关产品推荐
相关产品推荐

