【Lucene】架构

Lucene 的架构可以简单拆成 "两大流程、六大模块、N 个核心类"。

下面用一张脑图思路 + 关键类清单帮你一次理清。


一、两大流程

阶段 关键动作 涉及核心类

索引流程 分词 → 写倒排 → 刷盘/合并 `IndexWriter` `Analyzer` `Document` `Field`

搜索流程 解析查询 → 检索 → 打分 → 收集结果 `IndexSearcher` `Query*` `Collector` `ScoreDoc`


二、六大模块 & 代表类

模块 职责 重要类 / 接口

analysis 把文本切成 Term(分词、过滤、大小写、停用词) `Analyzer` `Tokenizer` `TokenFilter`

document 承载数据的"一行记录" `Document` `Field` `TextField` `StringField`

index 写:建索引、刷盘、合并;读:读倒排、正排、向量 `IndexWriter` `IndexWriterConfig` `DirectoryReader` `LeafReader`

store 抽象磁盘/内存目录,管理索引文件 `Directory` `FSDirectory` `RAMDirectory`

search 查询解析、打分、排序、翻页、聚合 `IndexSearcher` `Query` `TermQuery` `BooleanQuery` `TopDocsCollector`

util 辅助数据结构 `PriorityQueue` `FixedBitSet`


三、核心类速查表(按使用频率)

类 一句话定位

`IndexWriter` 写索引的入口,负责 `addDocument/updateDocument/forceMerge`

`IndexWriterConfig` 控制分词器、合并策略、Codec 等所有写参数

`Analyzer` 把原始文本变成 Token,常用实现 `StandardAnalyzer`

`Document` 一条"记录",内部由多个 `Field` 组成

`Directory` 索引文件存放的抽象目录,`FSDirectory`/`RAMDirectory`

`DirectoryReader` 打开只读视图,可感知实时刷新 `openIfChanged`

`IndexSearcher` 搜索门面,封装打分器、Collector,执行 `search(query, collector)`

`Query` 家族 查询语法树:TermQuery、BooleanQuery、RangeQuery、KnnVectorQuery...

`Collector` 家族 结果收集器:TopDocsCollector、TotalHitCountCollector、自定义聚合

`ScoreDoc` / `TopDocs` 搜索结果载体,含 docID + score + 排序键


四、索引物理结构(对应类)

  • Directory → 一个文件夹 = 一个索引

  • Segment → 每次 flush 产生一个段,对应 `LeafReader`

  • 倒排文件:`.tim/.tip/.doc/.pos/.pay` 由 `PostingsFormat` 管理(如 `Lucene90PostingsFormat`)

  • 正排/列存:`DocValues`(用于排序、聚合)

  • 存储字段:`.fdt/.fdx` 由 `StoredFieldsFormat` 管理


五、一句话总结

> Lucene = Analyzer 分词 + IndexWriter 写段 + DirectoryReader 读段 + IndexSearcher 查段 + Collector 收结果;

所有 API 都围绕 Document-Field / Query-Collector 这两组核心抽象旋转。

相关推荐
sniper_fandc10 天前
Elasticsearch从入门到进阶——搜索优化原理
elasticsearch·搜索引擎·lucene·1024程序员节
酥酥禾14 天前
C# LINQ常用语法
solr·lucene
cyh男23 天前
lucene中AutomatonQuery类的作用
lucene
cyh男23 天前
lucene中的PointRangeQuery和PointInSetQuery有什么区别
lucene
cyh男23 天前
为什么ES中不推荐使用wildcard查询
elasticsearch·lucene
渣渣盟25 天前
中文分词技术全解析
搜索引擎·全文检索·lucene
cyh男1 个月前
lucene 8.7.0 版本中的倒排索引、数字、DocValues三种类型的查询性能对比
lucene
cyh男1 个月前
Lucene 8.7.0 版本中dvd、dvm文件详解
lucene
是犹橐籥1 个月前
头歌Educoder答案 Lucene - 全文检索入门
搜索引擎·全文检索·lucene
cyh男1 个月前
Lucene 8.7.0 版本中docFreq、totalTermFreq、getDocCount等方法的含义
lucene