自学内容网 自学内容网

重生之我们在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 字段名称匹配。


原文地址:https://blog.csdn.net/qq_32880923/article/details/140588225

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!