概述
在前面讲述中,我们已经掌握了什么是es,同时也把es的服务已经安装启动,那么es是如何去储存数据,数据结构是什么,那么又是如何实现搜索的?
集
群
,
节
点
,
索
引
,
类
型
,
文
档
,
分
片
,
映
射
是
什
么
?
\color{#FF00FF}{集群,节点,索引,类型,文档,分片,映射是什么?}
集群,节点,索引,类型,文档,分片,映射是什么?
es是面向文档,关系行数据库和es的对比
Rlational DB | Elasticsearch |
---|---|
数据库 | 索引 |
表 | type |
行 | documnets |
字段 | fields |
Elasticsearch 在后台把每一个索引划分成多个分片,每一个分片可以在集群中的不同服务器之间进行迁移
逻辑设计
一个索引类型中,包含多个文档,当我们索引一篇文档的时候,就可以通过这样的顺序去寻找:索引>类型>文档。通过这个组合我们就能索引到某个具体的文档。注意ID不必是整数,实际上它是一个字符串
文档
在Elasticsearch中,文档有几个重要的属性
- 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key和value
- 可以是层次行的,一个文档中包含子文档
- 灵活的定义,文档不依赖预先定义的模式,我们都知道在关系型数据库中,需要提前定义字段才可以使用,在es中就不需要,对于es中的字段,我们可以忽略某一个字段,或者动态的添加一个新的字段
尽管我们可以随意的添加字段,但是每一个字段类型非常重要,因为es会保存字段和类型之间的映射以及其他的设置,这样映射具体到每一个映射的每一种类型,这也是为什么在es中,类型有时候也称为映射类型
类型
类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。类型中对于字段的定义称之为映射,比如name映射为字符串类型。我们说文档是无模式的,他们不需要拥有映射中所定义的所有字段,比如新增一个字段,es怎么做:新增一个18,es就开始猜,这是整型,还是字符串。同时也可能猜不对,所以最安全的方法就是提前定义好所需要的映射,这一点就和关系型数据库疏途同归。
索引
主节点索引是映射类型的容器,es中的索引是一个非常强大的文档集合。索引储存了映射的字段类型和其他设置,然后他们被储存到各个分片上面,我们来研究一下分片是如何工作的
物理设计 : 节点和分片 如何工作
一个集群至少有一个节点,而一个节点就是一个es进程,节点可以有多个索引为默认的,如果你创建索引,那么索引将会有5个分片构成,每一个主分片会有一个副本
上图是一个有三个节点的集群,可以看到主分片和副分片都不在同一个节点之内,这样的设计有利于某一个节点挂掉了,数据也不至于丢失,实际上,一个分片是一个Licene索引,一个包含倒排索引的文件目录,倒排索引在es不完全扫描全部文档的情况下面,就能告诉你有多少个关键字
倒排索引
es使用的是一种称为倒排索引的结构,采用Lucene倒排索作为底层,这种结构适用于全文搜索,一个索引由文档中不重复的列组成,对于每一个词,都有一个包含它的文档列表
具体的数据结构我在这里就不在赘述了,小船夫们需要学会面向百度编程 点我😇