文章十一: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"
            }
          }
        }
      }
    }
  }
}
相关推荐
yaoxin5211233 分钟前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
dFObBIMmai13 分钟前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw016 分钟前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
一切皆是因缘际会16 分钟前
AI数字分身的底层原理:破解意识、自我与人格复刻的核心难题
大数据·人工智能·ai·架构
上海光华专利事务所19 分钟前
跨境电商商标专利管理平台
大数据·产品运营
czlczl2002092532 分钟前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql
ACP广源盛139246256731 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
Elastic 中国社区官方博客1 小时前
ES|QL METRICS_INFO 和 TS_INFO:为你的时间序列数据建立目录
大数据·数据库·elasticsearch·搜索引擎·信息可视化·全文检索
俺不要写代码2 小时前
数据库:函数
数据库·mysql
2401_882273722 小时前
如何在 CSS 中正确加载本地 JPG 背景图片
jvm·数据库·python