文章十一: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"
            }
          }
        }
      }
    }
  }
}
相关推荐
2301_793804692 小时前
用Python制作一个文字冒险游戏
jvm·数据库·python
隔壁小邓2 小时前
IDEA 中同时启动多个微服务
java·微服务·intellij-idea
:1212 小时前
idea17创建tomcat项目(计网底层核心理解!)
java·ide·intellij-idea
Bdygsl2 小时前
MySQL(3)—— 约束
数据库·mysql
dapeng28702 小时前
用Python破解简单的替换密码
jvm·数据库·python
Brookty2 小时前
网络通信核心:四元组、socket与IO机制详解
java·网络通信·网络入门
setmoon2142 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
sqyno1sky2 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
学编程就要猛2 小时前
MySQL:库操作
数据库·mysql