在elasticsearch5.0.0中映射也有很多的變化。數據結構
一、string類型被替換成了text/keyword兩種類型。 app
對於分詞字段的字符串字段用text來替換,對於不分詞的字符串字段用keyword來替換,爲了兼容5.0中還保留了string類型,將在6.0版本中去掉。elasticsearch
字符串映射如今有以下的默認映射:orm
{ "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }
字符串被映射成了兩個字段,一個字段進行分詞,另外一個子字段不進行分析,能夠用於聚合或者排序。對象
二、數字類型排序
數字類型如今是一種全新的數據結構,被成爲BKD tree。相比之前的方式有更快的對比查詢效率和佔用更少的磁盤空間。注意,數字類型將不參與索引的評分,若是須要對數字字段進行參與評分,能夠同時映射爲數字類型和keyword類型。例如:索引
PUT my_index { "mappings": { "my_type": { "properties": { "my_number": { "type": "long", "fields": { "keyword": { "type": "keyword" } } } } } } }
三、geo_point字段接口
和數字類型類型,Geo point字段類型也用了BKD tree結構。.因爲這種結構從根本上進行多維空間數據的支持,下列字段參數將不在支持:Geohash,geohash_prefix,geohash_precision,lat_lon。Geohashes在接口中仍然可使用,但他們再也不是用來索引地理數據點。ip
四、_timestamp 和 _ttl 字段ci
元字段_timestamp 和 _ttl字段將再也不被支持,對於_timestamp能夠在文檔中添加日期字段來代替或者用ingest pipline,例如:
PUT _ingest/pipeline/timestamp { "description" : "Adds a timestamp field at the current time", "processors" : [ { "set" : { "field": "timestamp", "value": "{{_ingest.timestamp}}" } } ] } PUT newindex/type/1?pipeline=timestamp { "example": "data" } GET newindex/type/1
對於_ttl能夠用time-based索引或者在一個時間戳字段範圍查詢(_delete-by-query)的任務來替換。
POST index/type/_delete_by_query { "query": { "range" : { "timestamp" : { "lt" : "2016-05-01" } } } }
五、索引屬性
全部再用的字段類型,除了將要廢棄的string,索引屬性只有 true/false用來代替not_analyzed/no,string字段類型仍是analyzed/not_analyzed/no.
六、非索引字段的文檔值
在此以前,設置一個字段的屬性爲index:no將禁用文檔的值,如今,doc-values的值對數字和boolean類型的值老是有效,除非doc_values的值設置爲false。
七、默認浮點類型的之用float來代替double
在動態映射浮點類型的字段時,默認映射成float類型,而不是double類型,由於大多數狀況下float類型已經夠用了,而float類型將顯著的減小磁盤空間的佔用。
norms如今用boolean來代替對象,norms.enabled被替換成了boolean,norms.loading 參數eager 將不在起做用,如今norms是基於磁盤的.
設置fielddata.format: doc_values在用於隱式啓用字段的文檔映射中。如今隱式方式將不在起做用,須要明確的設置doc_values的值爲有效或者無效。
fielddata.filter.regex參數將不在支持,將來版本會取消。
八、字段映射限制
在5.0中對索引中的字段進行了限制,最大1000個字段。
字段的最大深度(嵌套字段)是20。
索引中嵌套字段的最大數量是有限的50。
_parent字段將再也不索引,鏈接父母與孩子之間的文件再也不依賴索引字段,所以從5.0.0起_parent字段再也不索引。爲了找到文檔引用一個特定的父id,可使用新的parent_id來進行查詢。搜索返回中的獲得響應和hits仍然包括父鍵下的父標識。
_source映射再也不支持格式選項,如今只是爲了兼容性保留,爲了會被去掉。
核心類型再也不支持對象符號(bject notation),它被用來提供每一個文檔的boosts ,例如:
{ "value": "field_value", "boost": 42 }
_all查詢的精度
在_all上的每一個字段的長度由之前的4個字節壓縮到了一個字節,雖然這將使索引的空間效率更高,這也意味着索引時間的計算將不太準確。
本文由賽克 藍德(secisland)原創,轉載請標明做者和出處。