文章十一:ElasticSearch Dynamic Template详解
Dynamic Template动态模板是 Elasticsearch 中用于自动化管理动态新增字段映射的工具作用替代 ES 默认的字段类型猜测规则按自定义逻辑为 “未显式定义的新字段” 指定映射核心价值避免 ES 自动映射产生的不合理类型比如把数字字符串映射为 text减少后期重建索引的成本生效时机仅对 “写入时动态新增的字段” 生效已显式定义的字段不受影响。基于字段类型下面的例子中展示了这个功能当 Elasticsearch自动检测字段类型为long时比如写入数值18200这类整数不会使用默认的long类型而是强制映射为integer类型。PUT test_dynamic_template { settings: { number_of_replicas: 1, number_of_shards: 50 }, mappings: { dynamic_templates: [ { integer_type_mapping_hdk_test_name: { match_mapping_type: long, mapping: { type: integer } } } ] } }字段名称匹配机制通过设定名称的匹配机制解释match,unmatch,match_mapping_type规则实现根据名称的动态模板设置。PUT test_dynamic_template { settings: { number_of_replicas: 1, number_of_shards: 50 }, mappings: { dynamic_templates: [ { income1: { match: income1*, mapping: { type: integer } } }, { income2: { match: income2*, mapping: { type: long } } }, { income3: { match_mapping_type:string, unmatch: income*, mapping: { type: ip } } } ] } }注意unmatch不能单独使用需要和match或者是match_mapping_type结合使用。字段路径匹配机制通过path_match字段进行设置下面的例子展示了我们设定之后 插入的数据类型判断为keyword类型。PUT test_dynamic_template { mappings: { dynamic_templates:[ { path_user_mapping_test:{ path_match:user.*, mapping:{ type:keyword } } } ] } }PUT test_dynamic_template/_doc/1 { user:{ income11111:342, income231:57293845, shijian:127.0.0.1 } } GET test_dynamic_template/_mapping{ test_dynamic_template: { mappings: { dynamic_templates: [ { path_user_mapping_test: { path_match: user.*, mapping: { type: keyword } } } ], properties: { user: { properties: { income11111: { type: keyword }, income231: { type: keyword }, shijian: { type: keyword } } } } } } }