動態模板(Dynamic templates)
通過dynamic_templates,你可以擁有對新字段的動態映射規則擁有完全的控制。你設置可以根據字段名稱或者類型來使用一個不同的映射規則。
每個模板都有一個名字,可以用來描述這個模板做了什麼。同時它有一個mapping用來指定具體的映射信息,和至少一個參數(比如match)用來規定對於什麼字段需要使用該模板。
"dynamic_templates": [ // @1
{
"my_template_name": { // @2
... match conditions ... // @3
"mapping": { ... } // @4
}
},
...
]
代碼@1:在類型映射時通過dynamic_templates屬性定義動態映射模板,其類型為數組。
代碼@2:定義動態模板名稱。
代碼@3:匹配條件,定義方式包括match_mapping_type、match、 match_pattern、unmatch、path_match、path_unmatch。
代碼@4:匹配@3的字段使用的類型映射定義(映射參數為類型映射中支持的參數)。
動態模板的核心關鍵是匹配條件與類型映射,接下來按照匹配條件定義方式來重點講解動態模板映射機制。
首先使用JSON解析器解析字段值的類型,由於JSON不能區分long和integer,也不能區分double和float,所以它總是選擇更廣泛的數據類型。
在使用字段動態映射時,elasticsearch會將字段動態映射為long而不是integer類型,那如何將數字動態映射為integer類型呢?利用match_mapping_type可以實現上述需求。
例如,如果希望將所有整數字段映射為integer而不是long,可以使用以下模板:
PUT data6
{
"mappings": {
"numeric_detection": true,
"dynamic_templates": [
{
"integers": {
"match_mapping_type": "long",
"mapping": {
"type": "integer"
}
}
}
]
}
}
接著插入一條文檔數據:
PUT data6/_doc/1
{
"count": 5,
"no": "100"
}
查看索引data6映射定義:
閱讀更多 軟件架構 的文章
關鍵字: ElasticSearch JSON 模板