Elasticsearch学习笔记1:整体理解

Elasticsearch 技术总结:从倒排索引到分布式搜索引擎

核心概念
Elasticsearch(ES) 是一个基于 Lucene 的开源搜索引擎。
它位于应用与数据之间,将数据写入后即可通过关键词高效搜索。
高性能的关键在于底层的数据结构——倒排索引


倒排索引:搜索的核心

构建方式
倒排索引(Inverted Index)将「词项 → 文档 ID」建立映射。

  1. 对文本分词,得到词项(term);
  2. 记录每个词项对应的文档集合(posting list);
  3. 通过排序与二分查找实现高效匹配。
    词项表(Term Dictionary) + 文档列表(Posting List)共同构成倒排索引。

Term Index:加速词项查找

目录索引
词项太多时,Term Dictionary 体积庞大。
Term Index 将共享前缀提取为紧凑的前缀树结构,存储在内存中。
它记录词项在磁盘中的偏移位置,从而快速定位到 Term Dictionary 中的词项位置,大幅提升查询速度。


Stored Fields 与 Doc Values

行列存储结合
  • Stored Fields:按行存储完整文档,用于返回搜索结果内容。
  • Doc Values:按列存储字段值,用于排序与聚合操作。
    行列结合,使得 ES 既能全文检索,又能高效排序与统计。

Segment:最小搜索单元

Segment 的作用
倒排索引、Stored Fields 与 Doc Values 等结构共同组成一个 Segment
Segment 是 Lucene 的最小搜索单元,只读不可修改,保证读写分离。
新增文档会生成新 Segment,旧 Segment 只负责查询。
多个小 Segment 会周期性 合并(Segment Merge) 为更大的 Segment,以控制文件数量。


Lucene 与 Elasticsearch 的关系

Lucene 是内核,ES 是封装
Lucene 提供底层搜索能力,但缺乏高并发与分布式能力。
Elasticsearch 通过封装 Lucene,实现:

  • 高性能:多分片并行读写;
  • 高扩展性:多节点分布式部署;
  • 高可用:主从分片与自动故障转移。

Elasticsearch 架构演进

从单机到分布式
  1. Index:逻辑索引名,表示一类数据集合(如新闻、商品)。
  2. Shard:分片,每个分片是一个独立的 Lucene 实例。
    • 写入时按哈希路由分配到主分片;
    • 主分片成功后同步到副本分片。
  3. Replica:副本分片,既能提供读请求,也能在主分片失效时接管写入。

集群节点角色

Node 角色划分
  • Master Node:负责集群状态与选主;
  • Data Node:负责存储数据与执行搜索;
  • Coordinating Node:接收客户端请求、汇总结果。

节点通过类似 Raft 的机制保持状态一致,实现去中心化的高可用集群。


搜索与写入流程简述

写入流程
  1. 客户端请求 → 协调节点;
  2. 协调节点路由到目标主分片;
  3. 主分片写入 Lucene Segment;
  4. 成功后同步至副本分片;
  5. 全部分片 ACK 后返回成功。

搜索流程
搜索分为两阶段:

  1. Query Phase:协调节点将查询分发至各数据节点分片,返回匹配的文档 ID;
  2. Fetch Phase:协调节点根据文档 ID 请求完整内容并汇总结果返回客户端。

总结

总结
Elasticsearch 本质上是分布式的 Lucene。
它通过分片、副本与多节点架构,解决了 Lucene 的单机限制,成为集搜索、存储与聚合分析于一体的高性能引擎。
理解倒排索引与 Segment,是深入掌握 Elasticsearch 的关键。