在mapping中使用default字段,那麼其它字段會自動繼承default中的設置。node
PUT http://node1:9200/my_index { "mappings":{ "_default_":{ "_all":{ "enable":false } }, "user":{ }, "blogpost":{ "_all":{ "enable":true } } } }
default 中的_all字段在 5.x 中已經被廢棄 ,因此上面會出異常 可是規則可用。apache
上面的mapping中,default中關閉了all字段,user會繼承_default中的配置,所以user中的all字段也是關閉的,blogpost中開啓_all,覆蓋了_default的默認配置。json
當default被更新之後,只會對後面新加的文檔產生做用。數組
文檔中有一個以前沒有出現過的字段被添加到ELasticsearch以後,文檔的type mapping中會自動添加一個新的字段。這個能夠經過dynamic屬性去控制,dynamic屬性爲false會忽略新增的字段、dynamic屬性爲strict會拋出異常。若是dynamic爲true的話,ELasticsearch會自動根據字段的值推測出來類型進而肯定mapping:app
JSON格式的數據 | 自動推測的字段類型 |
---|---|
null | 沒有字段被添加 |
true or false | boolean類型 |
floating類型數字 | floating類型 |
integer | long類型 |
JSON對象 | object類型 |
數組 | 由數組中第一個非空值決定 |
string | 有多是date類型(開啓日期檢測)、double或long類型、text類型、keyword類型 |
日期檢測默認是檢測符合如下日期格式的字符串:ide
[ "strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
例子:post
POST http://node1:9200/my_index/my_type/1 { "create_date": "2015/09/02" } GET http://node1:9200/my_index/_mapping --> { "my_index": { "mappings": { "my_type": { "properties": { "create_date": { "type": "date", "format": "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis" } } } } } }
關閉日期檢測:spa
PUT http://node1:9200/my_index { "mappings":{ "my_type":{ "date_detection":false } } } POST http://node1:9200/my_index/my_type/1 { "create_date": "2015/09/02" } GET http://node1:9200/my_index/_mapping --> { "my_index": { "mappings": { "my_type": { "date_detection": false, "properties": { "create_date": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } } } }
自定義日期檢測的格式:code
PUT http://node1:9200/my_index { "mappings":{ "my_type":{ "dynamic_date_formats":["MM/dd/yyyy"] } } } POST http://node1:9200/my_index/my_type/1 { "create_date": "09/25/2015" } GET http://node1:9200/my_index/_mapping --> { "my_index": { "mappings": { "my_type": { "dynamic_date_formats": [ "MM/dd/yyyy" ], "properties": { "create_date": { "type": "date", "format": "MM/dd/yyyy" } } } } } }
開啓數字類型自動檢測:orm
PUT http://node1:9200/my_index { "mappings":{ "my_type":{ "numeric_detection":true } } } POST http://node1:9200/my_index/my_type/1 { "my_float": "1.0", "my_integer": "1" } GET http://node1:9200/my_index/_mapping --> { "my_index": { "mappings": { "my_type": { "numeric_detection": true, "properties": { "my_float": { "type": "float" }, "my_integer": { "type": "long" } } } } } }
動態模板能夠根據字段名稱設置mapping,以下對於string類型的字段,設置mapping爲:
"mapping": { "type": "long"}
可是匹配字段名稱爲long_*格式的,不匹配*_text格式的:
PUT http://node1:9200/my_index { "mappings": { "my_type": { "dynamic_templates": [ { "longs_as_strings": { "match_mapping_type": "string", "match": "long_*", "unmatch": "*_text", "mapping": { "type": "long" } } } ] } } } PUT http://node1:9200/my_index/my_type/1 { "long_num": "5", "long_text": "foo" }
寫入文檔之後,long_num字段爲long類型,long_text扔爲string類型。
能夠經過default字段覆蓋全部索引的mapping配置,例子:
PUT _template/disable_all_field { "order": 0, "template": "*", "mappings": { "_default_": { "_all": { "enabled": false } } } }