文章十一:ElasticSearch Dynamic Template详解

Dynamic Template(动态模板)是 Elasticsearch 中用于自动化管理动态新增字段映射的工具:

  • 作用:替代 ES 默认的字段类型猜测规则,按自定义逻辑为 "未显式定义的新字段" 指定映射
  • 核心价值:避免 ES 自动映射产生的不合理类型(比如把数字字符串映射为 text),减少后期重建索引的成本;
  • 生效时机:仅对 "写入时动态新增的字段" 生效,已显式定义的字段不受影响。

基于字段类型

下面的例子中展示了这个功能:

当 Elasticsearch 自动检测字段类型为 long 时(比如写入数值 18 200 这类整数),不会使用默认的 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"
            }
          }
        }
      }
    }
  }
}
相关推荐
NG47712 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
隔窗听雨眠12 小时前
从追赶者到定义者:中国BI如何借助AI实现弯道超车
大数据·人工智能
cspttty12 小时前
二本软件工程专业好就业吗?毕业后能做哪些岗位
大数据·软件工程
智圣新创0112 小时前
高校全域治理决策效能升级 智圣新创决策中台落地实操与行业趋势研判
大数据·人工智能·物联网
Zhu75812 小时前
在Docker环境部署ApacheGuacamole,对接PG数据库
数据库·docker·容器
程序员天天困12 小时前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
Elasticsearch12 小时前
用 Elasticsearch 的 RRF 融合检索,把矿物鉴定准确率从 36% 拉到 92%
elasticsearch
Leighteen12 小时前
Redis与MySQL双写一致性:从问题根源到工程落地
数据库·redis·mysql
Elasticsearch13 小时前
景枢:基于 Elastic AI Agent Builder 的多景区购票智能运维中枢技术解析
elasticsearch
战血石LoveYY13 小时前
Integer类型超限,导致数据异常
java·算法