快速了解Elasticsearch基础架构
本文旨在让不了解Elasticsearch的小白对其有一个基本认识。下文中将称Elasticsearch为ES。
本文旨在让不了解Elasticsearch的小白对其有一个基本认识。下文中将称Elasticsearch为ES。
一、具有完整搜索功能的最小单元segmengt
1、倒排索引inverted index:
当你把文档导入ES时,ES会对文档进行“分词”操作,分词后的每个称为“词项”term。ES会对词项进行索引建立,将词项与文档id对应起来。其中term按字典序排列好,叫term dictionary,文档id叫posting list,这个搜索结构就是倒排索引inverted index(图1-1)。

图1-1
2、字典序 term index:
由于term dictionary数据量很大,所以放在磁盘中。但是查询磁盘的访问速度是很慢的,所以优化的地方在运用term index。它是一种前缀树(目录树),每个节点都记录了该词在磁盘中的偏移量,从而快速找到term在磁盘中的位置(图1-2)。

图1-2
3、存储文档stored fields:
找到文档id后,还需要通过文档id找到文档内容本身才能够吧内容返回给用户。其中用到stored fields,他是一种行式存储结构。

图1-3
4、排序字段doc values:
doc values是列式存储结构,存的是文档的排序字段。当需要对文档进行排序时,将这些字段全部取出来即可,不用重新便利文档来进行排序。
5、Segment——具有完整搜索功能的最小单元:
segment聚合了Inverted Index、Term index、Stored Fields和Doc Values,是具有具有完整搜索功能的最小单元(图1-4)。
| Inverted Index |
| Term index |
| Stored Fields |
| Doc Values |
图1-4 segment的组合
二、架构细节,查询写入过程
1、lucene与segment:
多个文档写入ES,其构成了segment。segment是不可变的,一旦数据写入就不可删除。(注:若想修改文档,只能需要重建索引或者进行替换,若是替换,则会将旧文档标记为删除,ES后台会清理这些文档)。
随着文档增多,segment的数量也增多,文件句柄会被耗尽。ES可以合并多个小segment为大segmengt,控制文件数量。这些segment会构成一个lucene,即单机文本检索库(图2-1)。
| segment |
| segment |
| segment |
图2-1 lucene 单机文本检索库
2、ES作为怎么利用lucene实现高性能、高扩展、高可用
(1)多lucene结构 根据读写内容的不同,将请求路由到不同的lucene,降低单机lucene的读写压力(图2-2)。此外,lucene内也可以拆分成多个shard分片,每个shard分片就是一个独立的lucene库(图2-3)。

图2-2 根据类容区分为不同的index name

图2-3 lucene拆分为多个shard分片
(2)多机器部署 每台基础内部有单个或多个shard分片,这些机器成为DataNode。
(3)shard分片副本 为了解决单机node宕机导致的数据不可用问题,可以将shard的数据设置多个副本,分配在不同的node中,避免此问题。主分片负责读写,并将数据同步给副本分片,在主分片挂了的时候副本分片可以充当主分片角色。
(4)Node的不同角色 Master Node负责管理、Data Node负责存储数据、Coordinate Node(协调节点)负责客户查询请求。
(5)去中心化 多Node的选主(利用类似zookeeper的注册中心,或者用raft算法选主)

图2-4 ElasticSearch
3、写入和读取的操作流程
写入操作:

图2-5 写入操作
读取操作:分为query phase 和fetch phase两阶段
1、query phase:获取文档id,排序信息,并将结果返回给coordinate node

图2-6 query phase
1、fetch phase:coordinate node根据拿到的数据进行排序聚合,舍弃不需要的数据,并根据文档id进行数据查询,再把结果返回给客户端。

图2-7 fetch phase
部分图片来源出处:b站小白debug
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)