带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(6)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(6)


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(5) https://developer.aliyun.com/article/1230514


path_match 、 path_unmatch

 

在 Elasticsearch 中存储的文档允许有内嵌对象,当还有多层内嵌对象时,属性一般有路径的概念。属性的路径也可以作为匹配的条件。这个配置的用法与matchunmatch雷同,但需要注意的是matchunmatch仅作用于最后一级的属性名。

 

如下模板表示设置person内嵌对象除了age外其它所有以long_开头的字段新增时类型设为

text。


PUT test-dynamic-mapping
{
  "mappings": {
    "dynamic_templates": [
      {
        "test_float": {
          "match_pattern": "long_",  # 以 long_ 开头
          "path_match": "person.*",  # 内嵌对象 person 所有字段
          "path_unmatch": "*.age"    # 排除 age 字段
          "mapping": {
            "type": "text"  # 字段 type 设为 text
          }
        }
      }
    ]
  }
}

其它技巧及注意事项

 

在日常生产中难免有这样的需求,字段是什么类型就将类型设为什么,字段名是什么就用什么解析器。对于这种需求我们在配置动态模板的mapping时,可以使用占位符{name} 表示字段名,用 {dynamic_type}表示识别出的字段类型 。

 

比如下面 2 个模板一起表示的意思是,所有新增字符串类型字段,其解析器是字段的名称,所有其他类型字段新增时,类型就设为识别的字段类型,但是doc_value设为 false.


PUT test-dynamic-mapping
{
  "mappings": {
    "dynamic_templates": [
      {
        "named_analyzers": {  # 字段名即是该字段的解析器名称
          "match_mapping_type": "string", # 匹配所有 string 类型
          "match": "*",  # 匹配任意属性名
          "mapping": {
            "type": "text",
            "analyzer": "{name}"  # 解析器是字段名
          }
        }
      },
      {
        "no_doc_values": {  
         # 匹配所有类型,但匹配string的在前,所以
实际匹配除string的其他所有字段
          "match_mapping_type":"*", 
          "mapping": {
            "type": "{dynamic_type}", # 类型直接作为type
            "doc_values": false
          }
        }
      }
    ]
  }
}
PUT test-dynamic-mapping/_doc/1
{
  "english": "Some English text",  # 该字段是新字段,会在mapping中新增会用english解析器
  "count":   5  # 该字段的类型会是 long, doc_values为false
}

在使用动态模板时,还有以下几点需要注意。

 

1、所有null值及空数组属于无效值,不会被任何动态模板匹配,在索引文档时,只有字段第一次有有效值时,才会与各动态模板匹配,找出匹配的模板创建新字段。

2、规则匹配时,按照动态模板配置的顺序依次对比,使用最先匹配成功的模板,这就意味着如果有字段同时符合 2 个动态模板,那么会使用在dynamic_templates数组中靠前的那个。每个动态模板的匹配方式至少应包含matchpath_matchmatch_mapping_type中的一个,

unmatchpath_unmatch不能单独使用。

3、mappingdynamic_templates字段是可以在运行时修改的,每次修改会整体替换dynamic_templates的所有值而非追加。

比如下面的请求就是将映射test-dynamic-mapping原来的动态模板配置删除,并配一个名为newTemplate的动态模板。


PUT test-dynamic-mapping/_mapping
{
  "dynamic_templates": [
    {
      "newTemplate": {
        "match": "abc*",
        "mapping": {
          "type": "keyword"
        }
      }
    }
  ]
}


创作人简介

骆潇龙,高级 Java 开发工程师,关注大数据技术领域。

博客:https://blog.gaiaproject.club/

 

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
12月前
|
JSON 数据格式
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(5)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(5)
|
12月前
|
自然语言处理
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(4)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(4)
|
12月前
|
索引
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(2)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(2)
|
12月前
|
JSON Java 数据格式
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(3)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(3)
|
12月前
|
索引
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(1)
带你读《Elastic Stack 实战手册》之25:——3.4.2.10.Dynamic Mapping(1)
|
12月前
|
搜索推荐 API 索引
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(下)
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(下)
|
12月前
|
存储 JSON 数据库
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(上)
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(上)
|
12月前
|
数据格式 索引
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(中)
带你读《Elastic Stack 实战手册》之17:—— 3.4.2.2.理解mapping(中)
|
12月前
|
编解码 JSON Java
带你读《Elastic Stack 实战手册》之24:——3.4.2.9.Search template(5)
带你读《Elastic Stack 实战手册》之24:——3.4.2.9.Search template(5)
|
12月前
|
JSON 安全 API
带你读《Elastic Stack 实战手册》之24:——3.4.2.9.Search template(2)
带你读《Elastic Stack 实战手册》之24:——3.4.2.9.Search template(2)