Elasticsearch删除映射类型

本文介绍了Elasticsearch从6.0.0版本开始删除映射类型的原因和替代方案。映射类型在之前的版本中用于区分不同类型的文档,但在6.x及更高版本中,为了提高效率和避免字段冲突,每个索引只允许一个映射类型。替代方法包括将不同类型分开存储在不同索引中,或使用自定义字段。此外,文章还详细描述了如何使用Reindex API将多类型索引迁移到单一类型,并给出了示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 前言

官方解释:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html

在elasticsearch6.0.0或更高的版本中创建索引仅能包含单个映射类型。在具有多种映射类型的5.x版本中创建的索引将继续像以前一样在elasticsearch6.x中运行。类型将在elasticsearch7.0.0中的API中弃用,并在8.0.0中完全删除。

二 什么是映射类型?

从elasticsearch发布以来,每个文档都存储在单个索引中并分配了单个映射类型。映射类型用于表示要编制索引的文档或实体的类型。例如微博(twitter)索引可能具有用户(user)类型和推文(tweet)两个类型。
每种映射类型都可以有自己的字段,因此用户(user)类型可能有full_nameuser_nameemail字段;而推文(tweet)类型可能有contenttweet_at字段和用户(user)类型的user_name字段。
每个文档都有一个_type包含类型名称的元字段,通过在URL中指定类型名称,搜索可以限制为一种或多种类型:

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

_type字段与文档组合_id以生成_uid字段,因此具有相同类型的文档_id可以存储在单个索引中。
映射类型也用于在文档中建立父子关系,因此类型的文档question可以是类型文档的父类answer
扯了半天淡,一切不都是挺好的嘛?那还为啥要删除映射类型呢?

三 为什么要删除映射类型?

最初(其实到现在),为了便于理解elasticsearch的数据组织,通常拿elasticsearch和关系型数据库做对比,比如我们谈到一个es索引(index)时,通常将它比喻为类似于SQL数据库中的database,而类型(type)等同于SQL数据库中的表。
这真是一个糟糕的比喻!让我们有了错误理解。因为在SQL数据库中,表彼此独立,一个表中的字段与另一个表中具有相同名称的字段无关,而映射类型中的字段不是这种情况。
在elasticsearch的索引中,不同映射类型具有相同名称的字段在内部由相同的Lucene字段支持。换句话说,使用上面的示例,用户(user)类型中的user_name字段存储在和推文(tweet)类型中的user_name字段完全相同的字段中,而且两种类型中的user_name字段必须具有相同的映射(定义)。
当我们希望删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍婧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值