当前位置: 首页 > 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.xdnf.cn/news/1325089.html

相关文章:

  • 基于JS实现的中国象棋AI系统:多模块协同决策与分析
  • leetcode4_452 and 763
  • 一道同分排名的SQL题
  • Django开发Web应用
  • Dubbo 的SPI
  • 15.三数之和
  • vue3 el-table-column 列头添加 图标按钮
  • 使用websockets中的一些问题和解决方法
  • day25|学习前端js
  • Day7--滑动窗口与双指针--1695. 删除子数组的最大得分,2958. 最多 K 个重复元素的最长子数组,2024. 考试的最大困扰度
  • JavaSE——高级篇
  • Java面试宝典:Redis 入门与应用
  • Poisson分布:稀有事件建模的理论基石与演进
  • 用随机森林填补缺失值:原理、实现与实战
  • 力扣hot100:移动零问题的巧妙解决:双指针与原地交换策略(283)
  • 开发避坑指南(28):Spring Boot端点检查禁用失效解决方案
  • Vue3 中使用 Element Plus 完整指南
  • Spring AI Alibaba 项目接入兼容 OpenAI API 的大模型
  • 杂记 05
  • 母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南
  • Android使用Kotlin协程+Flow实现打字机效果
  • Python 作用域 (scope) 与闭包 (closure)
  • 【学习嵌入式-day-27-进程间通信】
  • Docker常见指令速查
  • 用户认证技术
  • STL库——string(类函数学习)
  • SQL详细语法教程(六)存储+索引
  • AI心理助手开发文档
  • 在python中等号左边的都是对象,在matlab中等号a = 3+2 a就是个变量
  • 力扣hot100:盛最多水的容器:双指针法高效求解最大容量问题(11)