OpenSearch动态映射模板配置咨询(Elasticsearch映射迁移场景)
嘿,我来帮你梳理下OpenSearch里的动态映射配置问题,其实从Elasticsearch迁移过来这块的语法基本是兼容的,不用太担心结构大改~
首先针对你最关心的让所有tag.*开头的字段自动映射为keyword:你现有的tags动态模板是完全正确的!这个模板里的match: "tag.*"会精准匹配所有以tag.开头的字段,mapping里指定的keyword类型和ignore_above: 512配置在OpenSearch里是完全支持的,不需要修改。
然后说说你提到的properties里已有的那些tags.source、tags.interface_name等字段:这些属于显式映射,它们的优先级是高于动态模板的。也就是说,如果某个字段已经在properties里定义了,动态模板不会覆盖它的配置。如果你希望这些已有的tag相关字段也遵循动态模板的规则,那可以把它们从properties里移除,这样动态模板就会自动处理;如果这些字段需要保留特殊的显式配置(比如你现在指定的keyword类型其实和动态模板一致,所以留着也没关系),那就继续放在properties里,不会影响动态模板对其他未定义的tag.*字段生效。
另外,你整个映射结构在OpenSearch里是完全合法的,我帮你整理成规范的代码块方便你直接使用:
{ "dynamic_templates": [ { "tags": { "mapping": { "ignore_above": 512, "type": "keyword" }, "match_mapping_type": "string", "match": "tag.*" } }, { "metrics_long": { "mapping": { "index": false, "type": "float" }, "match_mapping_type": "long" } }, { "metrics_double": { "mapping": { "index": false, "type": "float" }, "match_mapping_type": "double" } }, { "text_fields": { "mapping": { "norms": false }, "match": "*" } } ], "properties": { "fields.connection_state": { "type": "keyword" }, "tags.source": { "type": "keyword" }, "tags.interface_name": { "type": "keyword" }, "tags.neighbor_address": { "type": "keyword" }, "fields.af_data/prefixes_accepted": { "type": "long" }, "tags.vrf_name": { "type": "keyword" }, "fields.af_data/prefixes_advertised": { "type": "long" } } }
最后给你个小验证技巧:你可以创建一个测试索引,用上面的映射配置,然后插入一条包含新的tag.xxx字段的文档,之后通过GET /your-index-name/_mapping查看索引映射,确认这个新字段是不是被自动映射成了keyword,这样就能快速验证配置是否生效啦。
备注:内容来源于stack exchange,提问作者tron_jones

