最近在学习 elasticsearch ,学到字段的动态映射,在这里做点小笔记。希望像我这 样的 初学者 有作用。
三种动态映射方式
elasticsearch 的 mapping ,可以使用动态方式来创建字段的映射,减少手写的静态的 mapping 设置。就是在添加新数据的时候,动态的设置字段的mapping,就是动态地设置字段的类型和属性。
就是使用一定的匹配机制,把匹配上的数据字段,设置这些字段的类型和属性,不用事先手动的写上字段的 mapping。
1 字段类型匹配机制
在添加数据的时候,根据es自身的推断出来的实际的数据类型来匹配。匹配成功之后就把字段的类型和属性设置成配置的
创建索引、查询索引。(运行代码之前,记得去掉注释) |
|
PUT my-dynamic-template-001 DELETE my-dynamic-template-001 POST my-dynamic-template-001/_doc | { "my-dynamic-template-001" : { "aliases" : { }, "mappings" : { "dynamic_templates" : [ { "integer_type" : { "match_mapping_type" : "long", "mapping" : { "type" : "integer" } } }, { "string_type" : { "match_mapping_type" : "string", "mapping" : { "ignore_above" : 256, "type" : "keyword" } } } ], "properties" : { "companyName" : { "type" : "keyword", "ignore_above" : 256 }, "incom" : { "type" : "integer" }, "incom01" : { "type" : "keyword", "ignore_above" : 256 }, "incom02" : { "type" : "double" } } }, "settings" : { "index" : { "routing" : { "allocation" : { "include" : { "_tier_preference" : "data_content" } } }, "number_of_shards" : "1", "provided_name" : "my-dynamic-template-001", "creation_date" : "1616303044155", "number_of_replicas" : "1", "uuid" : "nuq3rB0DT5GT4gYAubPzpQ", "version" : { "created" : "7110199" } } } } } |
2 字段名称匹配机制
在添加数据的时候,es 会使用配置的字段名称正则表达式,去匹配数据字段的名称,把匹配成功的字段的类型和属性设置成配置的类型和属性。
创建索引、查询索引。(运行代码之前,记得去掉注释) | 运行结果 |
PUT my-dynamic-template-002 DELETE my-dynamic-template-002 POST my-dynamic-template-002/_doc | { "my-dynamic-template-002" : { "aliases" : { }, "mappings" : { "dynamic_templates" : [ { "integer_type" : { "match" : "*come*", "mapping" : { "type" : "integer" } } }, { "string_type" : { "match" : "company*", "mapping" : { "ignore_above" : 256, "type" : "keyword" } } } ], "properties" : { "companyName" : { "type" : "keyword", "ignore_above" : 256 }, "income" : { "type" : "integer" }, "income01" : { "type" : "integer" }, "income02" : { "type" : "integer" }, "income4" : { "type" : "double" } } }, "settings" : { "index" : { "routing" : { "allocation" : { "include" : { "_tier_preference" : "data_content" } } }, "number_of_shards" : "1", "provided_name" : "my-dynamic-template-002", "creation_date" : "1616304590742", "number_of_replicas" : "1", "uuid" : "h25GK-juTsSBgQaoZQRSSQ", "version" : { "created" : "7110199" } } } } } |
3 字段路径匹配机制
在添加数据的时候,es 会使用配置的字段路径正则表达式,去匹配数据字段的路径,把匹配成功的字段的类型和属性设置成配置的类型和属性
创建索引、查询索引。(运行代码之前,记得去掉注释) | 运行结果 |
PUT my-dynamic-template-003 DELETE my-dynamic-template-003 POST my-dynamic-template-003/_doc | { "my-dynamic-template-003" : { "aliases" : { }, "mappings" : { "dynamic_templates" : [ { "incomaaa" : { "path_match" : "finace.*", "mapping" : { "type" : "integer" } } } ], "properties" : { "companyName" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "finace" : { "properties" : { "income" : { "type" : "integer" }, "outcom" : { "type" : "integer" }, "tax1" : { "type" : "integer" } } } } }, "settings" : { "index" : { "routing" : { "allocation" : { "include" : { "_tier_preference" : "data_content" } } }, "number_of_shards" : "1", "provided_name" : "my-dynamic-template-003", "creation_date" : "1616319657366", "number_of_replicas" : "1", "uuid" : "YVAC60reTq-he1We39lHVQ", "version" : { "created" : "7110199" } } } } } |
字段类型匹配机制的范围最广,最不好控制,很容易出错。
字段名称匹配机制的范围比字段类型 匹配机制的范围要小,相对字段类型匹配机制要好控制一些,没有那容易出错。
字段路径匹配机制的范围比字段名称机制的范围要小,相对字段名称匹配机制要好控制一些,没有那么容易出错。
所以,推荐使用字段路径匹配机制。当然,三种匹配机制是可以混搭的。