《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(2) https://developer.aliyun.com/article/1230518
8、索引新文档时增加company.company_name字段。
9、由于company对象dynamic:strict,所以创建文档的请求返回了 1 个strict_dynamic_mapping_exception错误。
对于JSON 中的字段 遵循以下映射方式发现新属性。
对于 JSON 中的字符串字段,我们可以通过配置date_detection: true和numeric_detection:true尝试将它们转化成数值类型或时间类型,date_detection默认为 true,numeric_detection默认为 false。
在识别数字时,所有整型字符串会识别成long型,带小数的字符串会识别成float类型。默认情况下yyyy/MM/dd HH:mm:ss、yyyy/MM/dd、epoch_millis格式的字符串会识别成date类型。
# 创建测试索引 PUT test-dynamic-mapping { "mappings": { "dynamic": true, "numeric_detection": true, # 1 "properties": { "field1":{ "type": "keyword" } } } } # 插入数据 PUT test-dynamic-mapping/_doc/1 { "date":"2021/05/01", # 2 "float":"1.1", # 3 "long":"1" # 4 } # 查看 mapping 变化 GET test-dynamic-mapping { "test-dynamic-mapping" : { "mappings" : { "dynamic" : "true", "numeric_detection" : true, "properties" : { "date" : { # 5 "type" : "date", "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis" }, "field1" : { "type" : "keyword" }, "float" : { #6 "type" : "float" }, "long" : { # 7 "type" : "long" } } } } }
1、#1 处在创建索引时设置字符串可以自动识别为数值类型。
2、#2 处 date 字段条是符合时间格式的字符串。
3、#3 处 float 字段是符合小数格式的字符串。
4、#4 处 long 字段是符合整型格式的字符串。
5、#5 处 date 字段加入 mapping 并被自动识别成了 date 类型。
6、#6 处 float 字段加入 mapping 并被自动识别成了 float 类型。
7、#7 处 long 字段加入 mapping 并被自动识别成了 long 类型。
Elasticsearch 识别日期字符串的格式,是可以通过dynamic_date_formats来配置。该字段支持使用y、m、d、h等字符自定义格式,具体方式与 Java 中DateTimeFormatter对象实现的规则相同。
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.10.Dynamic Mapping(4) https://developer.aliyun.com/article/1230516