1.什么是type
在Elasticsearch(下文简称es)中,有两个概念:index和type。有一种不恰当的比方,index相当于关系型数据库中的库,type相当于关系型数据库中的表。使用起来确实很相似,但也容易产生误导。
实际上,index更近似于表,type只是index下的一个字段,只是可以通过type来区分index下不同类型的数据。同一个index下的不同type共享相同的字段。例如两个type都包含名称为a的字段,那两个type将共用字段a,而无法为两个type分别创建不同类型的字段a。
2.各版本对type的支持情况
Elasticsearch 5.x
- 每个index内可以有多个type。
- Elasticsearch 5.6.0版本,设置
index.mapping.single_type: true
,会限制每个index只允许一个type。
Elasticsearch 6.x
- index创建方法与5.x版本相比没有变化。
- 每个index只允许有一个type。type名字可以任意,但官方推荐将type命名为_doc,以便后续平滑升级到7.x。
例如6.x的index API为PUT {index}/{type}/{id}
,7.x的index API为PUT {index}/_doc/{id}
,使用_doc命名,升级后无需修改请求路径。 - Elasticsearch 6.7版本,index创建、index模板和mapping API支持
include_type_name
查询参数来指定请求和返回是否包含type名称。参数默认值是true,以便升级到7.0。如果不设置该参数,返回结果会包含一个警告。请求没有指定type时,会使用_doc为type。
Elasticsearch 7.x
- index中的type被去除。
- index API,手动指定id:
PUT {index}/_doc/{id}
,自动生成id:POST {index}/_doc
。在7.0中,_doc在请求路径中是一个固定值,不是type。 - index创建、index模板和mapping API中的
include_type_name
参数默认值为false。如果设置该参数,会返回一个警告。
Elasticsearch 8.x
- type在所有API请求中被去除。
include_type_name
参数被去除。