乐趣区

关于elasticsearch:关于-Elasticsearch-移除-type-的简要说明

之前碰到该问题在网上查阅了局部博客,前面浏览官网文档后发现大部分博客所形容的 Es 版本和其所做的对于移除 type 的工作的映射关系是谬误的,因而在这里对官网文档精简翻译了一下,简要阐明下为什么 Es 要移除 type,以及 Es 是怎么移除 type 的。

1. 为什么要移除 type?

咱们常常会用 MySQL 的常识来了解 es 的一些概念,比方将 es 的 index 类比成 database,将 type 类比成 table,但这个比喻实际上是不精确的。在 MySQL 中,table 之间是互相独立的,每个表有本人的 schema,每个表都能够有雷同的列名,同时反对不同的类型,比方表 A 的 age 列是 tinyint,而表 B 的 age 列是 varchar(10),但在 es 中,雷同名字的字段的 mapping 定义必须是统一的,因为在底层 Lucene 只会存一份。

在这个根底上,如果在一个 index 内存了多个 type,且这些 type 之间只有极少共用的字段,会使得数据过于离散,从而影响 Lucene 的压缩性能。

2. Es 为了移除 type 做了哪些工作

移除 type,从字面上就能看出是一个十分大的变动,因而 es 尽可能地提供了平滑的降级形式。

2.1 Elasticsearch 5.6.0

通过对 index 设置参数 index.mapping.single_type: true 就可能启用单 index 单 type 限度(一个 index 只能反对一个 type),同样该限度从 6.0 版本开始该限度会强制启用。

2.2 Elasticsearch 6.x

在 Elasticsearch 6.x 中,一个 index 只能反对一个 type,举荐的 type 名字为 _doc(这样能够在 API 方面向后兼容 7.x。

在 Elasticsearch 6.8 中,Elasticsearch 引入了一个参数管制 type 开关:include_type_name,默认值为 true,示意仍应用 type,手动设置为 false 后,申请 es 的 API 将不再蕴含 type,而是应用类 PUT /{index}/_doc/{id} 的格局。

2.3 Elasticsearch 7.x

在 Elasticsearch 7.x 中,include_type_name 被默认置为 false,新的 index API 格局为 PUT /{index}/_doc/{id}POST {index}/_doc 须要留神的是,_doc 并不是一个 type,而仅仅是 API 申请门路中永恒的一部分。

2.4 Elasticsearch 8.x

在 Elasticsearch 8.x 中,include_type_name 已被删除,同时也示意 es 不再反对任何自定义 type。

3. 参考资料

官网文档

退出移动版