《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(4) https://developer.aliyun.com/article/1230516
下面我们通过几个例子来说明一下匹配规则中的各个关键字如何使用。
match_mapping_type
match_mapping_type用于按照数据类型匹配,当用户想对 JSON 中具有某种数据类型的字段设置做特殊配置时,可以用此种匹配方式。该字段可配置的数据类型有如下几种:
l boolean,匹配值是 true 或 false 的字段。
date,当字符串开启了时间类型识别且字符串符合预设日期格式则会被匹配。
l double,匹配含有小数的字段。
l long,匹配值是整型的字段。
l object,匹配值是对象的字段。
l string,匹配值是字符串的字段。
l *,表示所有数据类型即匹配所有字段。
之前我们提到 Elasticsearch 会自动将整型字段自动创建为long型,如果我们知道文档中所有数值都不会超过int范围,那么我们可以用如下配置,让所以非小数的数值字段自动创建为
integer类型。
PUT test-dynamic-mapping { "mappings": { "dynamic_templates": [ { "test_float": { "match_mapping_type": "long", # 值是整型的字段会被匹配 "mapping": { "type": "integer" # 字段 type 统一设为 integer } } } ] } }
match 、unmatch
在生产使用中最多的场景,是根据字段的名称进行匹配。这时就可以用match和unmatch这两种匹配方式。match匹配的是符合设置的所有字段,unmatch匹配的是不符合某种配置的所有字段。在设置匹配规则时可以使用*表 0 个或多个字符。
比如下面这个模板就表示所有属性名以long_开头且不以_text结尾的字段配置其type为long。
PUT test-dynamic-mapping { "mappings": { "dynamic_templates": [ { "test_float": { "match": "long_*", # 属性名以 long_ 开头 "unmatch": "*_test", # 属性名不以 _test 结尾 "mapping": { "type": "long" # 字段 type 设为 long } } } ] } }
match_pattern
仅仅使用通配符,可能不能满足我们多变的匹配需求,那么我们可以将match_pattern设为
regex,这时match字段就可以用正则表达式了。
比如下面这个模板就表示所有以profit_开头,后跟至少 1 位数字的属性,将它们的type设为keyword。
PUT test-dynamic-mapping { "mappings": { "dynamic_templates": [ { "test_float": { "match_pattern": "regex", # match 使用正则表达式 "match": "^profit_\d+$" # 标准正则 "mapping": { "type": "keyword" # 字段 type 设为 keyword } } } ] } }
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(6) https://developer.aliyun.com/article/1230513