【lucene】currentFrame与staticFrame

`currentFrame` 是 `SegmentTermsEnum`(`TermsEnum` 的一个具体实现)里 "当前正在扫描的那个 block" 的 状态容器。

它对应的类型是 `SegmentTermsEnumFrame`,可以理解为 "在 BlockTree 字典里的一层节点解析器"。


✅ 一句话解释

`currentFrame` 负责 把 `.tim` 文件里的一个压缩 block 解包到内存,然后提供 在该 block 里顺序/二分查找 term 的能力,并且在找到目标 term 后,把指向 `.doc/.pos/.pay` 的指针解析出来。


✅ 主要职能拆成 4 步

步骤 方法 说明

1 `loadBlock()` 根据 `.tip` 给出的文件指针,把 `.tim` 文件里对应的 block 读进来并解压,得到 term 列表、统计信息、倒排指针等。

2 `scanToTerm(target)` 在上一步加载的 block 里 顺序或二分查找 是否包含目标 term,返回 FOUND / NOT_FOUND / END。

3 `decodeMetaData()` 找到 term 后,把 docFreq、docFP、posFP、payFP、skipFP 等指针解析成 `TermState`,供 `postings()` 使用。

4 `next()` / `nextLeaf()` 如果没命中或需要遍历,继续在同一个 block 里 顺序跳到下一个 term;block 用完就 弹栈 / 进栈 新的 `currentFrame`。


✅ 形象比喻

  • 把 BlockTree 看成 一本多级目录的词典,`.tip` 是 目录页,`.tim` 是 词条页。

  • `SegmentTermsEnum` 就像 翻书的人。

  • `currentFrame` 就是 他手里当前摊开的这一页,上面记录着:

  • 这一页的范围(prefix)

  • 这一页里有多少词条(后缀数组)

  • 每个词条的详细解释在哪一页(倒排指针)

只有 `currentFrame` 把这一页 真正摊开(loadBlock),后面的 `nextDoc()` 才能根据页码去 `.doc/.pos/.pay` 里拿 文档列表。

`staticFrame` 是 `SegmentTermsEnum` 里的一个 "永远指向 BlockTree 根节点"的只读 Frame,

它跟 `currentFrame` 不同:

  • 只读:`staticFrame` 本身不随扫描过程移动,它永远保存整棵字典的根 block的元数据。

  • 作用:

  1. 在 `seekExact()/seekCeil()` 之前,先把 `currentFrame = staticFrame` 复位,表示"回到根节点,重新开始"。

  2. 提供根节点的前缀长度、后缀起始地址等常量,供后面 push 新帧时计算偏移量。

  3. 避免每次 new 一个空 Frame,省一次对象分配。

一句话:

`staticFrame` 是 SegmentTermsEnum 的"树根锚点",用来快速回到字典起点,而 `currentFrame` 才是随遍历或二分不断切换的"工作节点"。

相关推荐
2601_9618752411 小时前
法考资料电子版|pdf|资料已整理
elasticsearch·搜索引擎·pdf·全文检索·solr·lucene·sphinx
2601_9618454214 小时前
考研公共课资料推荐|英语数学政治|电子版|资料已整理
搜索引擎·中文分词·solr·lucene·sphinx·高考
解决问题no解决代码问题15 小时前
漏洞详解|CVE-2026-44825 Apache Solr 隐藏默认账号漏洞(附检测+修复全套方案)
apache·solr·lucene
2601_961845423 天前
高考真题下载|2025高考全科真题网盘分类整理
搜索引擎·中文分词·solr·lucene·sphinx·高考
2601_961194026 天前
教资科三美术考什么|初中高中美术题型考点和模板资料
leetcode·elasticsearch·职场和发展·蓝桥杯·pat考试·lucene
2601_9611940210 天前
考研模拟卷谁的比较好|27李林合工大肖四肖八数学英语408PDF
考研·elasticsearch·全文检索·代理模式·lucene·桥接模式·访问者模式
醉颜凉16 天前
Lucene底层原理:倒排索引实现原理与代码实战,彻底吃透搜索引擎核心
搜索引擎·mybatis·lucene
risc12345619 天前
DocumentsWriterFlushQueue
lucene
risc12345619 天前
DocumentsWriterDeleteQueue 的核心设计思想
java·全文检索·lucene
music score1 个月前
google 的C++自动化测试框架详解(Google Test)(2)
c++·qt·lucene