架构

ES高可用高性能
notion image

ES

Elasticsearch (ES) 是一个分布式的搜索和分析引擎,它基于 Lucene 构建,支持实时文档检索、全文搜索以及复杂的聚合分析。
  1. 节点 (Node): 每个运行 Elasticsearch 的 JVM 实例都是一个节点。
  1. 集群 (Cluster): 一组节点构成一个集群,它们共同管理数据和提供搜索功能。
  1. 索引 (Index): 相当于数据库,存储相同类型的文档集合。
  1. 类型 (Type): ES 7.x 及之前版本中,每个索引下可以有多个类型,类似表。从 ES 7.x 开始,每个索引只能有一个类型,默认为 _doc
  1. 文档 (Document): 类似于行,是可索引的最小单位。
  1. 分片 (Shard): 索引被分成多个分片,每个分片是一个 Lucene 实例。
  1. 副本 (Replica): 每个分片可以有零个或多个副本,用于提高系统的可用性和容错能力。

整体架构

notion image
notion image

shard 分片

每个 shard 分片本质上就是一个独立的 lucene 库。这样我们就可以将读写操作分摊到多个 分片 中去,大大降低了争抢,提升了系统性能。
notion image

Lucene

多个Segment构成
如果新增文档时,还是写入到这份 segment,那就得同时更新 segment 内部的多个数据结构,这样并发读写时性能肯定会受影响。那怎么办呢?我们定个规矩。segment 一旦生成,则不能再被修改。如果还有新的文档要写入,那就生成新的 segment。这样老的 segment 只需要负责读,写则生成新的 segment。同时保证了读和写的性能。 可以不定期合并多个小 segment,变成一个大 segment,也就是段合并(segment merging)。这样文件数量就可控了。 多个 segment,就共同构成了一个单机文本检索库,它其实就是非常有名的开源基础搜索库 lucene。不少知名搜索引擎都是基于它构建的

Segment

倒排索引用于搜索,Term Index 用于加速搜索,Stored Fields 用于存放文档的原始信息,以及 Doc Values 用于排序和聚合。 这些结构共同组成了一个复合文件,也就是所谓的"segment", 它是一个具备完整搜索功能的最小单元

倒排索引

根据分词器,解析文本建立目录树,对应数据行
notion image

Term dictionary

词典
类似于AC状态机,类似二分查找构建所以索引目录
notion image

SortFiled

行存储,文档本身
notion image

Doc Values

再构造一个列式存储结构,将散落在各个文档的某个字段,集中存放,当我们想对某个字段排序的时候,就只需要将这些集中存放的字段一次性读取出来,就能做到针对性地进行排序。
文档内某个字段的排序
notion image
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP