《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(3) https://developer.aliyun.com/article/1230517
同时还能配置大量国际标准的时间格式比如:epoch_millis、basic_date、basic_date_time、
strict_date_optional_time_nanos 等,所有可选项可以参照官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.10/mapping-date-format.html
# 创建测试索引 PUT test-dynamic-mapping { "mappings": { "dynamic": true, "dynamic_date_formats": ["MM/dd/yyyy"] # 识别MM/dd/yyyy格式的时间 "properties": { "field1":{ "type": "keyword" } } } } # 插入数据 PUT test-dynamic-mapping/_doc/1 { "date":"09/25/2015", "date1":"2015/09/25" } # 查看mapping变化 { "test-dynamic-mapping" : { "mappings" : { "dynamic" : "true", "dynamic_date_formats" : [ "MM/dd/yyyy" ], "properties" : { "date" : { # 符合MM/dd/yyyy格式的字符串识别为了date类型 "type" : "date", "format" : "MM/dd/yyyy" }, "date1" : { # 符合默认yyyy/MM/dd 格式的字符串识未正确识别 "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "field1" : { "type" : "keyword" } } } } }
动态模板(Dynamic templates)
Elasticsearch 的动态字段映射(Dynamic field mappings)虽然使用简单,但往往不满足现实的业务场景,比如对于整型字段,往往用不着 long 类型,使用 integer 类型就足够了;对于字符串类型的字段,我们希望细化分词方式,而不是使用默认分词,以及对于不同字段采用不同的分词方式等。这时可以使用动态模板(Dynamic templates)功能来实现上述需求。
动态模板允许你在创建 mapping 时,设置自定义规则。当新字段满足该规则时,则按照预先的配置来创建字段。
Elasticsearch 允许用户通过3个角度来定义规则:新字段的数据类型,属性名和路径。创建 mapping 时可以通过dynamic_templates字段配置多个动态模板。
模板的整体结构如下:
{ "mappings":{ "dynamic_templates": [ { "templateName":{ #1 ……匹配规则…… # 2 "mapping": { ... } #3 } } ] } }
1、#1 处定义了动态模板的名称,每个动态模板都需要配置名字,本例中配置的模板名称为
templateName。
2、#2 处可以使用match_mapping_type、match、 unmatch、 match_pattern、path_match、path_unmatch来配置该模板的匹配规则,规则可以是多个,规则之间是与的关系。
3、#3 处配置的是符合该规则的字段使用的 mapping 配置,此处与正常创建字段相同,主要需要配置type,analyzer等。
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(5) https://developer.aliyun.com/article/1230514