Elasticsearch索引同时配置动静态映射提示字段无类型报错如何解决
Elasticsearch 完全支持为索引的部分字段单独配置动态映射策略,你当前的报错是因为遗漏了对象字段的类型声明。
错误原因
你在配置中仅为 traits.private、traits.public 字段声明了 dynamic: true,但没有指定这两个字段本身的类型为 object。对于嵌套对象字段,必须先明确其类型为 object,才能为其下的子字段配置动态映射规则。
修正后的配置示例
{ "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "dynamic": false, "date_detection": false, "properties": { "id": { "type": "keyword" }, "metadata": { "dynamic": false, "properties": { "time": { "properties": { "insert": { "type": "date" } } } } }, "traits": { "properties": { "private": { "type": "object", "dynamic": true }, "public": { "type": "object", "dynamic": true } } } } } }
补充说明
子对象的动态映射配置优先级高于父层级的配置,你在根 mappings 下设置的 dynamic: false 不会影响 traits.private、traits.public 下的动态字段新增规则:
- 如果你希望新增的子字段自动创建静态映射、写入倒排索引支持查询聚合,保持
dynamic: true即可 - 如果你不希望新增字段占用索引存储空间、仅需要临时查询,可将值改为
dynamic: "runtime",新增字段会作为运行时字段存在 - 如果你不需要索引新增字段仅存储原始数据,可将值改为
dynamic: false
内容的提问来源于stack exchange,提问作者RKO
相关产品推荐
相关产品推荐

