在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)原创,转载请标明做者和出处。