本文旨在让不了解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

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐