You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Elasticsearch根字段迁移至嵌套字段并重构查询结果

Elasticsearch 旧索引数据迁移:将根级price移入每个store字段并移除根级price

要完成这个数据结构转换的迁移,直接用Elasticsearch的_reindex API配合Painless脚本就能实现,这是ES中处理数据结构调整迁移的标准方式。

完整迁移请求示例

执行以下POST请求,替换其中的旧索引名称和新索引名称为你实际的索引名:

POST _reindex
{
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": """
      // 遍历所有store条目,为每个store添加根级price字段
      for (entry in ctx._source.stores.entrySet()) {
        entry.getValue().price = ctx._source.price;
      }
      // 移除根级的price字段
      ctx._source.remove("price");
    """
  }
}

脚本逻辑说明

  • ctx._source代表当前正在处理的原文档数据
  • 通过entrySet()遍历stores对象的所有键值对(比如"Store A"、"Store B"对应的对象)
  • 给每个store的子对象添加price字段,值直接复用原文档根级的price值
  • 最后调用remove("price")删除根级的price字段,完成结构调整

注意事项

如果旧索引数据量较大,可以在source中添加"size": 1000参数,设置每次批量处理的文档数,避免一次性加载过多数据影响集群性能。

内容的提问来源于stack exchange,提问作者Diego Azevedo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:47:30