ElasticSearch, Kibana
Dynamic Template 需要定义在特定索引的 mapping 中,其语法格式为:PUT 索引名称 { 'mappings': { 'dynamic_templates':[ { 'dynamic template名称':{ 'match':'匹配规则', 'unmatch':'不匹配规则', 'mapping':{ '配置项':'配置项的值', '...':'...' } } } ] } }
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 信息
Dynamic Template 示例2,对于 is 开头的字段,如果其推断类型为 String,则将其类型转换为 boolean , 对于 long 开头的字段,如果其推断类型为 String,则将其类型转换为 long 。图1示:根据上述业务需求,创建 Dynamic Template图2示:向索引中插入一条文档,注意包含 is 和 long 开头的字段,并且据值推断,这两个字段都是 string 类型图3示:通过 _mapping API 查询该索引的 mappings 信息,从返回信息中可以看出,上述两个字段的类型已经被正确转换为特定类型
Dynamic Template 定义中关键字 path_match 和 path_unmatch 的使用如果你的文档信息中包含嵌套内容,那么这两个关键字在进行自定义 Dynamic Template 时就很有用,可以通过字段路径的方式对特定字段进行匹配。具体示例,请查看图示。