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

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《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/

 

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
存储 资源调度 分布式计算
CDP中配置Apache Hadoop Yarn的安全性
CDP中配置Hadoop Yarn的安全性。
837 0
CDP中配置Apache Hadoop Yarn的安全性
|
9月前
|
数据采集 监控 搜索推荐
商业案例 I 数据中台用户场景案例
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
运维 Serverless 数据处理
函数计算产品使用问题之ComfyUI界面没有显示Manager按钮是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
9月前
|
数据可视化 数据管理 BI
远程团队如何高效运作?这些协作神器助你一臂之力!
随着远程办公的普及,团队面临沟通不畅、任务分配混乱、进度追踪困难等挑战。本文将探讨这些难题,并推荐5款实用的在线协作工具:板栗看板、Trello、Notion、Slack和Asana。每款工具都有其独特的优势和适用场景,帮助远程团队实现高效协作。
168 0
远程团队如何高效运作?这些协作神器助你一臂之力!
|
11月前
|
存储 固态存储 Java
文件系统使用固态硬盘(SSD)
【10月更文挑战第8天】
337 2
Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
|
Java
“a == b” 和 “a.equals(b)” 的区别
【8月更文挑战第22天】
275 0
|
前端开发 JavaScript 测试技术
"React新手入门的神奇之处:如何用React构建第一个应用,让你的项目一鸣惊人?"
【8月更文挑战第31天】本文详细介绍了如何从头开始构建首个React应用。React作为当今Web开发中备受欢迎的前端框架,采用组件化设计实现界面构建,便于维护与扩展。文章首先解释了React的基础概念,接着演示了使用Create React App搭建项目的步骤,展示了基础组件编写方法及React Router的简单运用,并分享了一些实用的最佳实践建议,帮助读者快速上手React开发。
195 0
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
237 0
|
Java Android开发 开发者
17. 【Android教程】开关控件ToggleButton/Switch
17. 【Android教程】开关控件ToggleButton/Switch
370 2