Elasticsearch如何为匹配命名规则的嵌套对象批量新增映射字段
结论
不行,原生Update Mapping API不支持直接按字段名匹配规则,批量给名称带_metadata后缀的嵌套对象新增子字段。
- 该接口要求明确指定要更新的完整字段路径,没有内置通配匹配、按名称规则批量定位字段的能力。你数据里的
hello_metadata、aksdjj_metadata都是互相独立的object类型字段,接口不会自动识别名称带指定后缀的字段做统一操作。 - 你排除动态模板的判断完全正确:动态模板仅对配置生效后新创建的字段生效,无法回溯作用于索引内已经存在的
*_metadata对象,确实满足不了你不能重建索引的限制。
无重建索引的可行方案
不需要重建索引,按以下步骤操作即可完成映射更新,完全符合API使用规范:
- 先调用接口拉取目标索引的现有映射,遍历顶层字段列表,筛选出所有名称以
_metadata结尾的object类型字段 - 构造单条Put Mapping请求,在请求体里给所有筛选出的
*_metadata字段逐个添加cheese字段的text类型定义,请求示例如下:
PUT /你的目标索引名/_mapping { "properties": { "hello_metadata": { "properties": { "cheese": { "type": "text" } } }, "aksdjj_metadata": { "properties": { "cheese": { "type": "text" } } } // 其余匹配到的_metadata后缀字段按相同结构补充即可 } }
注意:这个操作是原地更新映射,不会触发索引重建,不影响存量文档的正常读写。后续如果你新增了其他带
_metadata后缀的顶层字段,需要手动补充对应cheese子字段的映射——没有动态模板的情况下,ES不会自动给新的同后缀字段添加这个子属性。
内容的提问来源于stack exchange,提问作者Andrew T
相关产品推荐
相关产品推荐

