Elasticsearch为什么在6 7 版本后不再支持type了

背景说明

Elasticsearch是一个基于Apache Lucene™的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

Elasticsearch 是一种NoSQL数据库(非关系型数据库),和常规的关系型数据库(比如:MySQL,Oralce等)的基本概念,对应关系如下:

Elasticsearch:index --> type --> doc --> field

MySQL: 数据库 --> 数据表 --> 行 --> 列

因为关系型数据库比非关系型数据库的概念提出的早,而且很成熟,应用广泛。

所以,后来很多NoSQL(包括:MongoDB,Elasticsearch等)都参考并延用了传统关系型数据库的基本概念。

一个客观的现象和事实如下:

Elasticsearch 官网提出的近期版本对 type 概念的演变情况如下:

在 5.X 版本中,一个 index 下可以创建多个 type;

在 6.X 版本中,一个 index 下只能存在一个 type;

在 7.X 版本中,直接去除了 type 的概念,就是说 index 不再会有 type。

为何要去除 type 的概念?

为何不是在 6.X 版本开始就直接去除 type,而是要逐步去除type?

Why?!

原因分析

1、为何要去除 type 的概念?

答: 因为 Elasticsearch 设计初期,是直接查考了关系型数据库的设计模式,存在了 type(数据表)的概念。

但是,其搜索引擎是基于 Lucene 的,这种 “基因”决定了 type 是多余的。 Lucene 的全文检索功能之所以快,是因为 倒序索引 的存在。

而这种 倒序索引 的生成是基于 index 的,而并非 type。多个type 反而会减慢搜索的速度。

为了保持 Elasticsearch “一切为了搜索” 的宗旨,适当的做些改变(去除 type)也是无可厚非的,也是值得的。

所以,Why not?!

2、为何不是在 6.X 版本开始就直接去除 type,而是要逐步去除type?

答:因为历史原因,前期 Elasticsearch 支持一个 index 下存在多个 type的,而且,有很多项目在使用 Elasticsearch 作为数据库。

如果直接去除 type 的概念,不仅是很多应用 Elasticsearch 的项目将面临 业务、功能和代码的大改,

而且对于 Elasticsearch 官方来说,也是一个巨大的挑战(这个是伤筋动骨的大手术,很多涉及到 type 源码是要修改的)。

所以,权衡利弊,采取逐步过渡的方式,最终,推迟到 7.X 版本才完成 “去除 type” 这个 革命性的变革。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Elasticsearch中,"type" 是用于定义文档在索引内部如何被组织的一个属性名称。它是 Elasticsearch 实现数据分层的重要组成部分。当我们在创建索引入口(索引映射)时,我们可以指定一个或多个 "type" 来描述存储在索引中的不同类别的数据。这种设计使得搜索引擎能够对各种不同结构的数据进行高效处理和搜索。 ### Elasticsearchtype 的作用 1. **数据分类**:允许将相似或相关性质的数据存储在同一索引的不同部分。每个 type 表示索引中一组具有共同字段结构的数据类别。 2. **查询灵活性**:通过类型,查询变得更有针对性和高效。用户可以根据需要检索特定类型的数据,而不影响索引内其他类型的数据。 3. **字段管理**:每个 type 内部可以定义不同的字段以及它们的类型、属性(如分析器、格式化等)。这样的灵活性有助于定制数据的索引和搜索行为。 4. **API 约定**:在旧版本Elasticsearch 中,所有请求数据都会使用默认的 type “_doc”。从7.x 版本开始,Elasticsearch 引入了一种更细粒度的方式,允许通过 API 参数指定 type。 5. **过渡到更精细的分隔**:随着 Elasticsearch 的演进,从简单的类型转换到了更精细的“index pattern”和数据模型的概念,类型的作用逐渐转变为引导更高级的索引策略和数据组织逻辑。 ### Elasticsearchtype 的使用变化 从早期版本到最新的 Elasticsearchtype 的使用经历了一些改变: - **7.x 版本及之后**:引入了“index pattern”的概念替代了传统的 type,使得索引布局更加灵活,支持更复杂的多层级数据组织和搜索需求。 - **从文档到数据模型**:随着对数据模型的关注增加,Elasticsearch 开始鼓励用户构建更复杂的数据结构,其中类型的概念逐步淡化,转而强调数据模型和字段层次的设计。 ### 示例 假设在一个博客应用中,你可以有一个名为 “articles”的索引,它包含多个 type,比如:“posts”,专门用于存放文章;“comments”,用于存放评论。 ```json PUT articles/_mapping { "mappings": { "posts": { "properties": { "title": {"type": "text"}, "content": {"type": "text"}, "author_id": {"type": "keyword"} } }, "comments": { "properties": { "text": {"type": "text"}, "post_id": {"type": "integer"}, "user_id": {"type": "keyword"} } } } } ``` 在这个例子中,“posts” 和 “comments” 分别代表了不同类型的数据结构,它们各自拥有独特的字段集合和特性。 --- ### 相关问题: 1. **如何在 Elasticsearch 中创建和管理 type?** 2. **Elasticsearch 中的 type 与 index pattern 有何区别?** 3. **在实际应用中,何时应该创建新的 type?** 请注意,上述内容适用于当前主流的 Elasticsearch 使用习惯,并可能随版本更新有所变化。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值