ElasticSearch6.4 — Removal of mapping types 译

原文网址:

https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html#removal-of-types

 

删除映射类型

在Elasticsearch 6.0.0 或者更高版本中创建的索引可能只包含单个映射类型,在5.x中创建的索引具有多种映射类型,这个功能将继续在6.x之前运行,映射类型将在7.0.0中完全删除。

(5.x-6.x:多种映射类型,6.x之后单个映射类型,7.0.0中映射类型完全消失)

 

什么是映射类型?

自从Elasticsearch首个稳定版本发布以来,每个文档存储在单个索引里,并且分配映射类型,映射类型用来表示要编制索引的文档或者实体的类型,例如twitter索引可能具有user类型和tweet类型。

每个映射类型都有自己的字段,user类型也许有full_name字段,user_name字段,email字段,当然tweet也有content字段,tweeted_at字段和像user类型一样的user_name字段。

每个文档有一个_type元字段包含类型的名字,并且通过在URL指定类型名称s,可以将搜索限制为一种或多种类型:

GET twitter/user,tweet/_search { "query": { "match": { "user_name": "kimchy" } } }

这个_type字段和文档的_id结合字段生成_uid字段,所以有相同_id字段的不同类型的文档可以存在同一个索引里。

映射类型也用在建立文档之间的亲子关系,就是question类型的文档可能和answer文档有亲子系。

 

为什么映射类型会被删除?

最初,我们谈到的索引类似SQL数据库中的数据库,类型相当于表。

这是一个很糟糕的比喻,导致了错误的假设,在SQL数据库里,表是彼此相互独立的,这个表中的列和另一个表中同样名字的列没有关系,映射类型中的字段不是这种情况。

在ElasticSearch索引中,在不同映射类型中有相同名字的字段在内部由相同的Lucene字段支持,换而言之,使用上面的例子,user类型中user_name字段被存储在与tweet类型的user_name字段名字相同的字段中,并且这两个不同类型的user_name字段必须有完全相同的映射。

当你想要删除一个类型的date字段和同一个索引中另一个类型的另一个boolean字段时,这可能会很令人绝望。

更重要的是,存储在同一个索引中具有很少或者没有共同字段的不同实体会导致稀疏数据并干扰Lucene有效压缩文档的能力。

综合这些原因,我们决定从ElasticSearch中删除映射类型的概念。

 

映射类型的替代方法

Index per document type

第一个替代方法是每个索引对应一个文档类型,不像原来将tweet和user存储在一个twitter索引中,你可以在tweets索引中存储tweets类型和在user索引中存储user类型,索引完全彼此相互独立,因此索引之间不会有字段冲突(比如上文描述的同一索引中不同类型的user_name)

这个方法有两个好处:

  • 数据更可能是密集的,并且有益于Lucene中使用压缩技术
  • 用于全文搜索评分更可能是准确的,因为同一索引中的所有文档都代表单个实体。

每个索引都可以适应文档的数量进行大小调整:您可以为user索引使用较少数量的主分片,为tweets索引使用较大的主分片。

自定义类型字段

当然,集群中可以存在多少个主分片是有限制的,也许你并想要浪费整个主分片来存储几千个文档的集合,这种情况下,你可以实现你自己自定义的类型,工作方式和原来的_type一样。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值