Elasticsearch Dynamic Mapping動態映射策略-動態模板

動態模板(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 Dynamic Mapping動態映射策略-動態模板



分享到:


相關文章: