Elasticsearch学习笔记1:整体理解
Elasticsearch 技术总结:从倒排索引到分布式搜索引擎
核心概念
它位于应用与数据之间,将数据写入后即可通过关键词高效搜索。
高性能的关键在于底层的数据结构——倒排索引。
倒排索引:搜索的核心
构建方式
- 对文本分词,得到词项(term);
- 记录每个词项对应的文档集合(posting list);
- 通过排序与二分查找实现高效匹配。
词项表(Term Dictionary) + 文档列表(Posting List)共同构成倒排索引。
Term Index:加速词项查找
目录索引
Term Index 将共享前缀提取为紧凑的前缀树结构,存储在内存中。
它记录词项在磁盘中的偏移位置,从而快速定位到 Term Dictionary 中的词项位置,大幅提升查询速度。
Stored Fields 与 Doc Values
行列存储结合
- Stored Fields:按行存储完整文档,用于返回搜索结果内容。
- Doc Values:按列存储字段值,用于排序与聚合操作。
行列结合,使得 ES 既能全文检索,又能高效排序与统计。
Segment:最小搜索单元
Segment 的作用
Segment 是 Lucene 的最小搜索单元,只读不可修改,保证读写分离。
新增文档会生成新 Segment,旧 Segment 只负责查询。
多个小 Segment 会周期性 合并(Segment Merge) 为更大的 Segment,以控制文件数量。
Lucene 与 Elasticsearch 的关系
Lucene 是内核,ES 是封装
Elasticsearch 通过封装 Lucene,实现:
- 高性能:多分片并行读写;
- 高扩展性:多节点分布式部署;
- 高可用:主从分片与自动故障转移。
Elasticsearch 架构演进
从单机到分布式
- Index:逻辑索引名,表示一类数据集合(如新闻、商品)。
- Shard:分片,每个分片是一个独立的 Lucene 实例。
- 写入时按哈希路由分配到主分片;
- 主分片成功后同步到副本分片。
- Replica:副本分片,既能提供读请求,也能在主分片失效时接管写入。
集群节点角色
Node 角色划分
- Master Node:负责集群状态与选主;
- Data Node:负责存储数据与执行搜索;
- Coordinating Node:接收客户端请求、汇总结果。
节点通过类似 Raft 的机制保持状态一致,实现去中心化的高可用集群。
搜索与写入流程简述
写入流程
- 客户端请求 → 协调节点;
- 协调节点路由到目标主分片;
- 主分片写入 Lucene Segment;
- 成功后同步至副本分片;
- 全部分片 ACK 后返回成功。
搜索流程
- Query Phase:协调节点将查询分发至各数据节点分片,返回匹配的文档 ID;
- Fetch Phase:协调节点根据文档 ID 请求完整内容并汇总结果返回客户端。
总结
总结
它通过分片、副本与多节点架构,解决了 Lucene 的单机限制,成为集搜索、存储与聚合分析于一体的高性能引擎。
理解倒排索引与 Segment,是深入掌握 Elasticsearch 的关键。