LuceneElasticsearch 架构图详解

一、Lucene 核心架构
📝 写入流程 (Write Path)
Document
原始文档
Analyzer
分词器 (切词/过滤)
IndexWriter
索引写入器
Segment
段 (.tim/.tip/.doc)
Directory
FSDirectory / RAMDirectory
📖 查询流程 (Read Path)
Query
查询语句
Directory
FSDirectory / RAMDirectory
📦 索引文件结构 (Index Files)
.fnm (字段) | .tim (倒排表) | .tip (词典) | .doc (正排) | .nvd/.nvm (评分)

🔑 Lucene 核心组件

  • Analyzer - 文本分析:分词、停用词过滤、大小写转换、同义词处理
  • IndexWriter - 索引写入:增删改索引、维护段合并策略
  • Directory - 索引存储:内存索引(FSDirectory) / 磁盘索引(RAMDirectory)
  • Segment - 索引最小单元:包含倒排索引、正排索引、字段信息
  • IndexSearcher - 搜索入口:执行查询、聚合、打分
  • IndexReader - 读取索引:打开 Directory 并读取段数据
二、Elasticsearch 架构 (基于 Lucene)
客户端层
REST API
9200端口 · JSON over HTTP
Transport
节点间通信
Java Client
官方SDK
集群管理层
Cluster
Master选举 · 集群拓扑
Node Discovery
ZenDiscovery · 主节点选举
Routing
请求路由 · 负载均衡
分片管理层
Primary Shard
主分片 · 写入目标
Replica Shard
副本分片 · 高可用/读扩展
Shard Allocator
分片分配策略
Elasticsearch 引擎
Document API
CRUD · 路由策略
Search API
Query · Aggregations
Mapping
字段映射 · 类型定义
Settings
索引配置 · 分析器
Lucene 核心
IndexWriter
写索引
IndexSearcher
读索引
Analyzer
分词
Segment
段管理
存储层
Segment Files
.tim · .tip · .doc · .nvd
Translog
事务日志 · 数据恢复

🔑 ES 在 Lucene 之上添加的能力

  • 分布式集群 - 多节点协同、主从选举、故障转移
  • 分片机制 - Primary/Replica 分片,支持水平扩展和高可用
  • REST API - HTTP/JSON 接口,降低使用门槛
  • 自动路由 - 文档自动路由到正确分片,查询自动聚合
  • 聚合分析 - 强大的聚合能力 (Bucketing/Metrics)
  • 近实时搜索 - Refresh 间隔可配置,默认 1 秒

📊 Lucene vs Elasticsearch 对比

特性 Lucene Elasticsearch
定位 Java 库 分布式搜索引擎
部署 嵌入到应用中使用 独立服务,集群部署
分布式 ❌ 单机 ✅ 原生分布式
接口 Java API REST API + Java API
分片/副本 ❌ 需自己实现 ✅ 内置支持
高可用 ❌ 需自己实现 ✅ 自动故障转移
适用场景 内部搜索、单体应用 大规模搜索、日志分析
三、一句话总结

Lucene 是搜索引擎的 核心引擎(单机索引库)
Elasticsearch 是 Lucene 的 分布式封装(集群化解决方案)

ES = Lucene + 分布式协调 + REST API + 分片管理 + 高可用集群

通用组件
Lucene 核心
Lucene 索引
Lucene 查询
ES 集群管理