重生之我们在ES顶端相遇第7 章- 动态映射 - dynamic template(动态模板)

思维导图

在这里插入图片描述

前言

上一篇说的 dynamic mapping, 当字段不存在时,会按照一定的规则去映射字段类型。 而 dynamic template 则允许你修改这一规则。

PS:开发中几乎不用。为了知识体系的完善,本文章只做简单介绍,更多详细内容可自行阅读 官方文档

基本使用

该功能有以下几个主要参数控制映射行为。

  • • match_mapping_type:字段在 JSON 中的类型。
  • • match、unmatch:匹配字段名
  • • path_match、path_unmatch:匹配 object 字段名称。例如 name.firstName
match_mapping_type
PUT test5
{
  "mappings": {
    "dynamic_templates": [
      {
        "strings_mapping": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "keyword"
          }
        }
      }
    ]
  }
}

# 写入测试数据
POST test5/_doc
{
  "name": "csp"  
}

# 查询 Mapping
GET test5/_mapping

如果字段类型为 string, 则将其映射为 keyword。 其中 strings_mapping 为我们自定义的名称。

match、unmatch
# 删除
DELETE test5
PUT test5
{
  "mappings": {
    "dynamic_templates": [
      {
        "longs_as_strings": {
          "match_mapping_type": "string",
          "match":   "long_*",
          "unmatch": "*_text",
          "mapping": {
            "type": "long"
          }
        }
      }
    ]
  }
}

# 写入测试数据
PUT test5/_doc/1
{
  "long_num": "5", 
  "long_text": "foo" 
}

# 查询 mapping
GET test5/_mapping

上面的意思为:如果字段类型为 string,名称是以 long_ 开头,并且不以 _text 结尾的,都将字段类型映射为 long

path_match、path_unmatch
PUT test5
{
  "mappings": {
    "dynamic_templates": [
      {
        "full_name": {
          "path_match":   "name.long_*",
          "path_unmatch": "name.*_text",
          "mapping": {
            "type":       "long"
          }
        }
      }
    ]
  }
}


PUT test5/_doc/1
{
  "name.long_num": "5", 
  "name.long_text": "foo" 
}
该写法等同于以下写法

PUT test5/_doc/2
{
  "name" : {
    "long_num": "5",
    "long_text": "foo"
  }
}

GET test5/_mapping

上面的意思为:如果字段类型为 string,名称是以 name.long_ 开头,并且不匹配name.*_text 的,都将字段类型映射为 long。 与 match、unmatch 区别为:它用于 object 字段名称匹配。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值