跳到正文

Elasticsearch 学习路线:从倒排索引到集群运维 ​

按「先理解存和查,再理解写和评分,最后理解聚合、集群与生产」的顺序排列。 生产检查项单独放在 99-生产检查清单,正文讲机制。


学习顺序 ​

L1: ES 怎么存、怎么查
  → 01-架构与核心概念     集群/节点/分片/副本、容量测算
  → 02-倒排索引与分词     Term Dictionary → FST → Posting List、ik 分词

L2: 写入和查询怎么走
  → 03-写入与索引过程     Buffer → Refresh → Segment → Flush/Merge、Translog
  → 04-查询与相关性评分   Query vs Filter、BM25、profile、深分页

L3: 聚合和集群
  → 05-聚合分析           Bucket/Metric/Pipeline、doc_values
  → 06-集群管理与分片     Master 选举、分片分配、磁盘水位、allocation explain

L4: 生产上容易踩什么
  → 07-ES生产踩坑         Master 稳定性、Mapping 爆炸、磁盘只读、深分页、bulk 队列
  → 09-监控指标与告警     队列/堆/磁盘/分片状态、雪崩链、告警与处置顺序

L5: 向量与混合检索
  → 08-ES与AI             dense_vector/kNN、semantic_text、RRF、过滤召回

旧的 07-性能优化.md 已并入 07-ES生产踩坑.md;写入/查询调优内容不再单独成篇。

核心链路 ​

写入:Document
  → Coordinating Node 路由
  → Primary Shard:写 Lucene Buffer + Translog(WAL)
  → 同步复制到 Replica Shard
  → Refresh(默认 1s):Buffer → 新 Segment,可搜索但未持久化
  → Flush:Lucene Commit,Segment fsync,Translog 截断
  → 后台 Merge:合并小 Segment,清理删除标记

查询:Query → 各 Shard 检索 → Coordinating Node 归并 → BM25 算分 → 返回

ES 最核心的设计是 Segment 不可变 + 后台 Merge:不可变意味着读不需要锁,并发读性能高;代价是更新等于「标记旧文档 + 写新文档」,删除也要等 Merge 才真正回收空间。

向量检索沿用同一套结构:dense_vector 存在段里,kNN 走 HNSW 图;混合检索的差异在于 BM25 与向量各自召回,再用 RRF 融合。

一句话定位 ​

ES 的强项不是「向量检索最快」,而是全文检索、过滤、聚合、向量在同一个引擎里。当业务已经有 ES、且查询需要关键词与语义并用时,它的综合成本通常低于再引入一个专用向量库。

读法建议 ​

  • 先读 01、02,把分片、倒排索引和分词的关系理清;这两篇决定了后面所有性能问题的判断方式。
  • 再读 03、04,理解「写入后 1 秒才可见」和「query/filter 分工」;这是生产上最容易误用的两处。
  • 最后读 05、06、07、09,把聚合内存、分片分配、磁盘水位、bulk 队列和监控指标串起来;排障时按「现象 → 命令 → 判断」走。
  • 09 是运维视角的收口:先分清读/写路径,再看队列、堆、磁盘、分片四类指标,避免只盯单个阈值。
  • 有向量检索需求时读 08,先确认规模与过滤条件,再决定是否用 ES 而不是专用向量库。
  • 每篇末尾的「讲清楚」是三分钟口述版;读完先能复述机制和取舍,再回头查命令和默认值。

把一门技术讲透到既懂也会用