Elasticsearch 的原理

✅ 一、一句话概括 Elasticsearch 的原理

Elasticsearch 是基于 Lucene 构建的分布式全文搜索引擎,通过倒排索引实现高性能搜索,并支持横向扩展、分布式存储与高可用。

 如果 MySQL 是一个仓库,ES 更像是一个“图书馆索引系统”

  • MySQL 是库管员:你告诉它书名或编号,它去后面一排排书架翻,速度快不起来。

  • Elasticsearch 是图书馆的“索引卡”:它事先记录了“某个关键词在哪本书的哪一页”,你要找关键词时,直接查卡片就能知道答案在哪,特别快!


✅ 二、Elasticsearch 的核心原理分解

1️⃣ 架构原理(底层依赖 + 分布式设计)

组成部分说明
Lucene底层搜索引擎库,ES 的核心搜索和存储依赖它实现
倒排索引通过构建“词 ➝ 文档列表”映射,加速全文搜索
分布式架构多节点组成集群,索引可拆分成多个 shard,自动分布
主从副本机制每个 shard 会有 primary + replica,用于高可用
REST 接口所有操作(增删改查)基于 HTTP API,支持 JSON

🧠 2.1 文档写入流程(简图)

Client 请求
   ↓
接收节点(coordinating node)
   ↓
主分片(primary shard)接收写入
   ↓
 ① 写入 translog(磁盘,防丢失)
 ② 写入内存 buffer(未落盘)
   ↓(异步,每秒)
Lucene refresh → segment 文件生成(可被搜索)
   ↓
副本分片同步写入(确保高可用)

🔍 2.2  查询流程(简图)

用户请求搜索“编程”
   ↓
ES 查询倒排索引表:
"编程" -> [doc_id:1, doc_id:2]
   ↓
只加载文档1、2,直接命中
   ↓
返回内容、分页、高亮等结果


2️⃣ 索引原理(倒排索引 vs 正排索引)

🔁 正排索引(数据库的原理):

  • 结构:按行存储,每行数据包括所有字段

  • 优点:适合根据主键/唯一字段查单条记录

  • 缺点:全文搜索或模糊搜索效率低(要扫很多行)

🔁 倒排索引(ES 的核心原理):

  • 结构:关键词 ➝ 文档 ID 列表

  • 优点:适合关键词查询、全文搜索、高速匹配

举个例子

三条文档:

doc_id内容
1张三喜欢编程
2李四喜欢编程和足球
3王五也喜欢足球

构建倒排索引后:

关键词文档ID
张三[1]
编程[1, 2]
足球[2, 3]
喜欢[1, 2, 3]

当你搜索“编程”,直接查到 [1,2],不需要遍历所有文档。


3️⃣ 写入原理

  1. 写入请求发送到集群

  2. 由协调节点转发到负责的 primary shard

  3. primary shard 写入内存 buffer 和 translog(写前日志)

  4. 写成功后同步写入 replica shard(副本)

  5. 定时(默认 1 秒)refresh,生成 Lucene segment

  6. flush 后持久化到磁盘,清空 translog


4️⃣ 搜索原理

  1. 用户发出查询请求(REST 或 DSL)

  2. 请求发送到 coordinating node(协调节点)

  3. 协调节点将查询分发给所有包含该索引的分片

  4. 每个分片返回自己的查询结果(文档 + 分数)

  5. 协调节点汇总并排序,返回给客户端


✅ 三、ES 为什么搜索特别快?

原因解释
倒排索引搜索关键词直接命中文档 ID 列表,避免全表扫描
多分片并发查询可以并发执行在多个 shard 上,天然并行
分词优化文本被拆成词项,能模糊匹配、支持词组、短语搜索等
Lucene 的缓存 + 跳表结构查询结果合并、排序优化,减少磁盘访问
filter context 支持缓存精确过滤条件可缓存,提高命中速度


✅ 四、典型面试回答模板(推荐)

Elasticsearch 是一个分布式的全文搜索引擎,底层基于 Lucene。它的核心原理是构建倒排索引,将每个词映射到对应出现的文档列表,从而实现高效的关键词搜索与聚合分析。写入时数据会先进入内存 buffer 与 translog,定时刷新为 segment 文件并存储到磁盘。ES 还支持分布式查询、负载均衡与副本机制,因此查询性能强、扩展性好。在我们的项目中,我们用它来支撑高并发搜索、日志分析等场景。


✅ 五、你还可以扩展的回答点(加分项)

点位说明
支持结构化+全文混合搜索可查询精确字段、也支持全文内容
支持聚合(aggregation)类似 SQL 的 group by、sum、avg 等
支持分布式高可用多副本、多分片,自动路由、失败恢复
查询 + 写入分离架构查询性能不受写入频率干扰(合理配置)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值