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

Lucene 8.5.0 的 `.pos` 文件**逻辑结构**

Lucene 8.5.0 的 `.pos` 文件**逻辑结构**(按真实实现重新整理)

```
.pos 文件
├─ Header (CodecHeader)
├─ TermPositions × TermCount        ← 每个 term 一段,顺序由词典隐式决定
│   ├─ PackedPosDeltaBlock × N      ← 仅当 **无 payload 且 无 offset** 时存在
│   │   └─ 64 个 position-delta(PackedInts 压缩)
│   ├─ VIntBlock × PosVIntCount     ← 必写;剩余所有位置
│   │   ├─ PositionDelta   VInt
│   │   ├─ PayloadLength?  VInt     ← 最低位标记法,payload 启用时出现
│   │   ├─ PayloadData?    byte[len] ← **尾巴**阶段内联;整块阶段在 .pay
│   │   ├─ OffsetDelta?    VInt     ← offsets 启用时出现
│   │   └─ OffsetLength?   VInt     ← 同上
└─ Footer (CodecFooter)
```

关键结论  
`TermPositions` 就是一段连续的二进制数据,其内部按顺序包含:

- 0 个或多个 `PackedPosDeltaBlock`(≥64 个 delta 时才有)  
- 1 个 `VIntBlock`(剩余尾巴,长度 ≥0)

因此:

TermPositions = [PackedPosDeltaBlock × N] + VIntBlock

1. **PackedPosDeltaBlock** 只存 **纯 position delta**;  
2. **只要启用 payload 或 offset,则 PackedPosDeltaBlock 不出现**,全部走 VIntBlock;  
3. **payload bytes** 在“尾巴”阶段 **内联在 `.pos`**,整块阶段 **在 `.pay`**;  
4. **offset 元数据** 始终写在 `.pos` 的 VIntBlock。

http://www.dtcms.com/a/337640.html

相关文章:

  • Mybatis执行sql流程(二)之加载Mapper
  • SQL详细语法教程(六)存储+索引
  • 高效长尾关键词SEO优化
  • 汽车企业顾客满意度调查:全周期反馈解码方案(市场调研实践)
  • Redis 哨兵模式与主从架构对比
  • 江苏单电感M401A-晶晨S905L3A_频率1.5ghz赫兹_2+16G_安卓9_线刷固件包
  • iOS 应用上架全流程实践,从开发内测到正式发布的多工具组合方案
  • 决策树-信息增益(第二十三节课内容总结)
  • 上网行为安全管理与组网方案
  • 第四十天(Vue)
  • 【VUE】解决Vue路由重复导航报错
  • 嵌入式软件开发笔试题练习
  • 微算法科技(NASDAQ: MLGO)研究分片技术:重塑区块链可扩展性新范式
  • 智能代码助手革新开发效率
  • 【VUE】用EmailJS自动发送邮件到网易邮箱
  • JVM学习笔记-----类加载
  • 【深度学习4】神经网络-激活函数
  • 最短路spfa和多层图(P1073 [NOIP 2009 提高组] 最优贸易)题解
  • Linux系统等保三级安全加固执行手册(ReahtCentosKylin)
  • mq存量消息如何处理
  • STM32G4 Park及反Park变换(一)matlab建模
  • Spark 运行流程核心组件(三)任务执行
  • C语言基础:变量与进制详解
  • 直播美颜SDK架构揭秘:动态贴纸功能的实现原理与性能优化
  • 计算机网络技术-交换机配置(Day.2)
  • 戴尔易安信 PowerEdge R540服务器系统安装教程
  • 深度学习篇---卷积
  • 远程访问公司内网电脑怎么操作?3个简单通用的跨网异地连接管理计算机方法
  • IoT/透过oc_lwm2m和at源码,分析NB-IoT通信模组和主板MCU之间的通信过程
  • 自建K8s集群无缝集成阿里云RAM完整指南