当前位置: 首页 > news >正文

【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 这两组核心抽象旋转。

http://www.lryc.cn/news/596486.html

相关文章:

  • React 项目性能瓶颈分析
  • 力扣刷题 -- 572.另一颗树的子树
  • rk平台(rv1126/rk3588)音视频-交叉编译FFmpeg7.1
  • 蔚来汽车视觉算法面试30问全景精解
  • 【OpenCV篇】OpenCV——01day.图像基础
  • Redis 八股面试题
  • AI视频-剧本篇学习笔记
  • 猎板 PCB:多场景适配下印制线路板的材料选择优化策略
  • 《2025年5月鸽哒IM即时通讯原生双端APP源码解析:支持视频通话与实时语音(附实测数据)》
  • C语言:函数基础
  • 博途V18软件Automation License Manager中发生了内部错误解决方法
  • SMTP+VRRP实验
  • 14.8 LLaMA2-7B×Dolly-15K实战:从准确率63%到89%,如何用优质数据让大模型性能飙升42%?
  • C语言(20250722)
  • C语言(八)
  • es搜索实现既能模糊查询又能分词查询
  • 永不疲倦的守护者:Deepoc具身智能如何重塑安保机器人的“火眼金睛”
  • Kotlin多线程调试
  • 【机器学习】第五章 聚类算法
  • [Semantic Seg][KD]FreeKD: Knowledge Distillation via Semantic Frequency Prompt
  • JS--M端事件
  • Docker容器 介绍
  • Taro 网络 API 详解与实用案例
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十课——车牌识别的FPGA实现(2)实现车牌定位
  • STM32-第十节-DMA直接存储器存取
  • Collection接口的详细介绍以及底层原理——包括数据结构红黑树、二叉树等,从0到彻底掌握Collection只需这篇文章
  • Class10简洁实现
  • IDEA-自动格式化代码
  • 嵌入式 Qt 开发:实现开机 Logo 和无操作自动锁屏
  • C语言面向对象编程