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

Elasticsearch Reindex API如何保留目标索引映射并删除嵌套字段

问题根因

重索引时目标索引映射被自动修改,是因为默认配置下ES开启了动态映射,而你迁移的_source中包含未在目标索引中定义的foo.baz字段,ES自动将该字段补充到了映射中。


嵌套字段的实现方案

方案1:通过_source参数过滤嵌套字段

ES的_source参数支持includes和excludes语法,可以精准控制嵌套层级的字段是否迁移:
如果你仅需要排除foo.baz、保留其他所有字段,直接配置排除规则即可:

{
  "source": {
    "index": "my-index-0",
    "_source": {
      "excludes": ["foo.baz"]
    }
  },
  "dest": {
    "index": "my-index-1"
  }
}

如果需要保留的字段较少,也可以主动指定需要迁移的嵌套字段:

{
  "source": {
    "index": "my-index-0",
    "_source": {
      "includes": ["foo.fizz", "其他需要保留的字段路径"]
    }
  },
  "dest": {
    "index": "my-index-1"
  }
}

方案2:关闭目标索引动态映射(保险配置)

如果需要严格控制目标索引的映射结构,避免任何未定义字段被自动加入,可以在创建新索引时将dynamic属性设为false:

{
    "mappings": {
        "doc": {
            "dynamic": false,
            "properties": {
                "foo": {
                    "properties": {
                        "fizz": {
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }
}

该配置下,就算_source中携带了未定义的字段,也只会将字段内容存入_source,不会修改索引映射。如果需要完全禁止未定义字段写入,可以将dynamic设为strict,此时写入携带未定义字段的文档会直接报错,方便提前发现问题。


内容的提问来源于stack exchange,提问作者Paweł Rubin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:57:02