1.1 引言
由于长期使用es,但是对于es的大体结构存在疑惑,于是在此做一个大致总结。
1.2 数据存储结构
在 7.0版本之前,es的数据结构如下:
提示: 通过上图可知,在7.0之前elasticsearch的结构层级是:index->type->document。因此,我们在es中,可以定义多个索引(index),一个索引下可以定义多个类型(type),一个类型下可以存多个文档(document)。
在 7.0版本之后,es的数据结构如下:
提示: es的结构依旧是:index->type->document,但是7.0几乎是舍弃了type,因为不在允许用户自定义type,而是存在一个默认的“_doc”类型。因此于用户而言,es7.0+不存在type类型了。
创建例子:
#7.0以前:创建一个叫做product的索引,下面有两个类型(book、phone),他们分别有两个字段name、author与cpu、gpu
PUT /product
{
"mappings":{
"book":{
"properties":{
"name":{
"type":"keyword"
},
"author":{
"type":"keyword"
}
}
},
"phone":{
"properties":{
"cpu":{
"type":"keyword"
},
"gpu":{
"type":"keyword"
}
}
}
}
}
#7.0之后:分别创建了两个索引:book与phone
PUT /book
{
"mappings":{
"properties":{
"name":{
"type":"keyword"
},
"author":{
"type":"keyword"
}
}
}
}
PUT /phone
{
"mappings":{
"properties":{
"cpu":{
"type":"keyword"
},
"gpu":{
"type":"keyword"
}
}
}
}
提示: 从以上dsl可以发现,7.0+不再提供type自定义。在7.0-,mapping映射是跟type绑定的。但是在7.0+后,mapping映射则是跟index绑定。
7.0以前,可以通过关系型数据库来理解es,index相当于数据库、type相当于表、document相当于一条记录。而在7.0+,则是相当于index下没有表了,直接就是一条条数据,可以理解为表取代了数据库,或者说数据库具备了表的功能,反正就是去掉了type(表)这一层。留有此文,以便他日之需。