[ES] 移除 mapping types

Elasticsearch决定移除映射类型,因为它们导致了字段定义的冲突和数据稀疏问题。映射类型使得不同类型的同名字段在底层是相同的Lucene字段,限制了灵活性。此外,它们不利于高效压缩和存储。这一改变意味着用户和tweet等类型的区分将不再存在,每个索引中的所有文档都将统一处理。
摘要由CSDN通过智能技术生成

什么是 mapping types?

自从Elasticsearch第一次发行以来,每个文档保存在单个索引中并且属于特定的映射类型, 映射类型 用于表示文档或者实体类型,例如一个twitter索引可能有一个user类型和一个tweet类型

每个映射类型可以有自己的字段,因此user类型可能有一个full_name字段 ,一个user_name字段,和一个email字段;而twitter索引可能有一个user类型和一个tweet类型

每个文档 都有一个元字段 _type 包含了类型名,在搜索的时候可以对一个或多个类型进行限制,例如:

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

这个 _type字段和文档_id合并生成_uid字段,因此不同类型文档可能在索引里有相同的_id

映射类型还用于在文档之间建立父子关系,因此question类型文档可以是answer类型文档的父级。

为什么移除映射类型?

最初,我们说索引类似于数据库类型相当于.

这是一个错误的类比,导致了错误的假设。在数据库中,表与表之间是相互独立的。表与表的列名不会互相影响。但是在映射类型字段中并非如此。

在Elasticsearch索引中,不同类型的映射类型的同名字段在底层是相同的Lucene字段。换言之,在上面的例子中,user类型user_name字段tweet类型user_name字段保存在相同的Lucene字段,并且在两个类型中的user_name字段必须有相同的定义。

这会导致问题,例如,当你希望deleted在一个类型中是date字段,在另一个类型boolean字段

此之外,在同一个索引中存储具有很少或没有公共字段的不同实体会导致数据稀疏,并影响Lucene高效压缩文档的能力。

基于这些原因,我们决定从Elasticsearch中删除映射类型的概念。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值