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

简介: 带你读《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并实现搜索。  
相关文章
|
5月前
|
机器学习/深度学习 文字识别 测试技术
10B击败200B!阶跃星辰10B视觉语言SOTA模型开源
阶跃星辰发布开源多模态小模型Step3-VL-10B,仅10B参数却媲美百亿级大模型,在视觉感知、逻辑推理、数学竞赛等任务中达同规模SOTA,支持端侧部署,推动智能终端交互革新。
467 6
|
XML Android开发 数据格式
Android启动页解决攻略最终版
相信很多人都在网上查过关于启动白屏或者黑屏的问题。 一般的App应该是分为两种: 有闪屏页或者启动页(SplashActivity),页面大概会持续2到3秒 没有闪屏页和启动页,打开应用后会直接跳转到应用主界面 不管有没有启动页,如果你不处理,你会发现当你点击桌面上那个icon图标的时候会先闪白屏或者黑屏一下,然后才会进入我们设定的页面。
2598 0
|
云安全 存储 Cloud Native
怎么样能顺利通过阿里云ACE考试?难度是不是很大?
阿里云认证是现在IT行业内广受认可的一个认证,其中难度最高的就是ACE考试,很大人都会选择考这个这个来提升自己的就业竞争力,但是自从ACE改版之后,难度大大增加,考试的内容和形式很多人都不了解。
1096 1
怎么样能顺利通过阿里云ACE考试?难度是不是很大?
|
存储 安全 开发工具
ZYNQ裸板:程序固化篇
一般的调试中我们都是通过 JTAG 接口将 FPGA 配置文件和应用程序下载到 ZYNQ 器件中。同样的,我们也可以将尝试把程序存储在非易失性存储器中,在上电或者复位时让程序自动运行,这个过程需要启动引导程序( Boot Loader) 的参与
973 0
ZYNQ裸板:程序固化篇
1、Drools规则引擎-什么是规则引擎
### 什么是规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件, 实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。 接受数据输入,解释业务规则,并根据业务规则做出业务决策。
862 0
1、Drools规则引擎-什么是规则引擎
|
SQL 消息中间件 分布式计算
触宝科技基于Apache Hudi的流批一体架构实践
当前公司的大数据实时链路如下图,数据源是MySQL数据库,然后通过Binlog Query的方式消费或者直接客户端采集到Kafka,最终通过基于Spark/Flink实现的批流一体计算引擎处理,最后输出到下游对应的存储。
820 0
触宝科技基于Apache Hudi的流批一体架构实践
|
消息中间件 Unix Java
SpringBoot整合RocketMQ发送事务消息
RocketMQ提供了类似X/Open XA的分布式事务功能,通过事务消息能达到分布式事务的最终一致。XA是一种分布式事务解决方案,一种分布式事务处理模式
|
分布式计算 Java MaxCompute
如何跨项目工作空间访问MaxCompute资源和函数
在项目开发过程中,相同云账号之下所创建的不同项目工作空间的资源和函数需要实现互相访问,需要授予什么权限呢?怎么去操作才可以去访问其他工作空间所创建的资源和函数。本文通过三种方式来介绍如何去授权访问跨工作空间的资源和函数。
3311 0
如何跨项目工作空间访问MaxCompute资源和函数
|
消息中间件 存储 NoSQL
幂等解决方案集合(二)消息幂等
msgId 一定是全局唯一标识符,但是实际使用中,可能会存在相同的消息有两个不同 msgId 的情况(消费者主动重发、因客户端重投机制导致的重复等),这种情况就需要使业务字段进行重复消费。
幂等解决方案集合(二)消息幂等

热门文章

最新文章