多语言展示
当前在线:582今日阅读:19今日分享:20

ElasticSearch学习--Dynamic Template的使用

对于索引而言,其 mappings 中的配置主要用于定义其字段的相关信息,我们可以让ElasticSearch自动生成索引的mappings(包括自动推断字段类型等),也可以为每一个索引手动配置相关信息(工作量比较大),当然也可以通过 index template 指定基本统一的 mappings(粒度比较大,没法直接定义字段类型),那是否有更好的方式定制更精准更符合特定业务需求的 mappings 呢?答案就是本篇经验将要分享的 Dynamic Template。
工具/原料

ElasticSearch, Kibana

方法/步骤
1

Dynamic Template 需要定义在特定索引的 mapping 中,其语法格式为:PUT 索引名称 {   'mappings': {     'dynamic_templates':[         {           'dynamic template名称':{             'match':'匹配规则',             'unmatch':'不匹配规则',             'mapping':{               '配置项':'配置项的值',               '...':'...'             }           }         }       ]   } }

2

Dynamic Template 示例1,将文档字段 firstname 和 lastname 拷贝到新字段full_name (使用 match 关键字指定正则进行匹配), 但需要排除字段 middlename (使用 unmatch 关键字指定正则进行排除),定义语句为:PUT myindex {   'mappings': {     'dynamic_templates':[       {         'my_dynamic_template':{           'match':'*name',           'unmatch':'middle*',           'mapping':{             'type':'text',             'copy_to':'full_name'           }         }       }       ]   } }图1示:创建上述自定义的 Dynamic Template图2示:向索引中插入一条文档,并通过 Dynamic Template中定义的虚拟字段进行查询图3示:通过 _mapping api 查询该索引的 mapping 信息

3

Dynamic Template 示例2,对于 is 开头的字段,如果其推断类型为 String,则将其类型转换为 boolean , 对于 long 开头的字段,如果其推断类型为 String,则将其类型转换为 long 。图1示:根据上述业务需求,创建 Dynamic Template图2示:向索引中插入一条文档,注意包含 is 和 long 开头的字段,并且据值推断,这两个字段都是 string 类型图3示:通过 _mapping API 查询该索引的 mappings 信息,从返回信息中可以看出,上述两个字段的类型已经被正确转换为特定类型

4

Dynamic Template 定义中关键字 path_match 和 path_unmatch 的使用如果你的文档信息中包含嵌套内容,那么这两个关键字在进行自定义 Dynamic Template 时就很有用,可以通过字段路径的方式对特定字段进行匹配。具体示例,请查看图示。

推荐信息