背景说明

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,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”  这个 革命性的变革