3.4.2.17.2.Schemaless
创作人:王福强
审稿人:欧阳楚才
Elasticsearch 一个重要特点是简化用户操作,让你尽快开始探索数据。 要写入文档,你不用先创建索引、定义映射类型和定义字段 - 你可以只索引文档,那么 index、type 和 field 将自动生成。
PUT data/_doc/1 { "count": 5 }
上面的命令将自动帮我们生成一个叫做 data 的 index,并同时生成一个叫做count的 field。count 的数据类型是 long。
自动检测和添加新字段称为动态字段映射。动态字段映射规则可以根据动态模板自由定制:
l 动态字段映射:动态字段检测的规则。
l 动态模板:用于配置动态添加字段映射的自定义规则。
动态字段映射
当 Elasticsearch 在文档中检测到新字段时,它默认动态地将该字段添加到类型映射中。
你可以使用 dynamic 属性(四个选项)控制添加到映射的新字段的效果:
上面的表格显示,当一个新的字段被添加到一个索引中,并且这个字段之前没有在 mapping 中定义:
l 在 dynamic 为 true 时,这个文档将被建立索引,从而新增加的字段将是可以被搜索及应用于聚合,mapping 也会自动更新
l 在 dynamic 为 false 时,这个文档将被建立索引,但是新的字段将不被建立索引,mapping 将不被更新(包含新的字段的mapping)
l 在 dynamic 为 strict 时,这个文档将不被建立索引
l 在 dynamic 为 runtime 时,这个文档将被建立索引,而且这个 runtime 字段可以被搜索,但是字段没有被分词。关于 runtime 请参阅官方文档:Map a runtime field
提示:你可以使用 update mapping API 更新现有字段的 dynamic 设置。
你可以自定义日期检测和数值检测的动态字段映射规则。 要定义可应用于其他动态字段的自定义映射规则,请使用 dynamic_templates。
日期检测
如果 date_detection 已启用(默认),则检查新字符串字段以查看其内容是否与 dynamic_
date_formats 中指定的任何日期模式匹配。 如果找到匹配项,则会添加一个具有相应格式的新日期字段。
dynamic_date_formats 的默认值为:
[ "strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
动态模板
动态模板允许你在默认动态字段映射规则基础上更好地控制 Elasticsearch 如何映射你的数据。 你可以通过将 dynamic 参数设置为 true 或 runtime 来启用动态映射。 然后,你可以使用动态模板来定义自定义映射,这些映射可以根据匹配条件应用于动态添加的字段:
l match_mapping_type 对 Elasticsearch 检测到的数据类型进行操作。
l match 和 unmatch 使用正则来匹配字段名称。
l path_match 和 path_unmatch 对字段的路径进行操作。
l 如果动态模板没有定义 match_mapping_type、match 或 path_match,它将不会匹配任何字段。
动态模板由命名对象的数组来定义的:
"dynamic_templates": [ { "my_template_name": { (1) ... match conditions ... (2) "mapping": { ... } (3) } }, ... ]
1、template 的名字可以是任何一个字符串
2、匹配的条件可以是这里的任何一种 match_mapping_type , match , match_pattern , unmatch , path_match , path_unmatch
3、被匹配的字段的 mapping
以下请求定义了一个名为 strings_as_ip 的动态模板。 当 Elasticsearch 检测到与 ip* 模式匹配的新字符串字段时,它会将这些字段映射为 ip 类型的运行时字段。 因为 ip 字段不是动态映射的,所以你可以将此模板与 "dynamic":"true" 或 "dynamic":"runtime" 一起使用。
PUT my-index-000001/ { "mappings": { "dynamic_templates": [ { "strings_as_ip": { "match_mapping_type": "string", "match": "ip*", "runtime": { "type": "ip" } } } ] } }
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.2.Schemaless(下) https://developer.aliyun.com/article/1230157