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

相关文章:

  • 永磁同步电机控制算法--转速环电流环超螺旋滑模控制器STASMC
  • 大数据毕业设计选题推荐:基于Hadoop+Spark的城镇居民食品消费分析系统源码
  • 【项目】分布式Json-RPC框架 - 项目介绍与前置知识准备
  • 将 iPhone 联系人转移到 Infinix 的完整指南
  • Zephyr下ESP32S3开发环境搭建(Linux篇)
  • 【Python语法基础学习笔记】常量变量运算符函数
  • 分布式系统的“不可能三角”:CAP定理深度解析
  • flask——4:请求与响应
  • 敏感数据加密平台设计实战:如何为你的系统打造安全“保险柜”
  • 实战演练:通过API获取商品详情并展示
  • pytest的前置与后置
  • 【笔记ing】考试脑科学 脑科学中的高效记忆法
  • c++26新功能—可观测检查点
  • 晨控CK-GW08S与欧姆龙PLC配置Ethernet/IP通讯连接手册
  • PHP现代化全栈开发:微前端架构与模块化实践
  • 深入解析RabbitMQ与AMQP-CPP:从原理到实战应用
  • Elasticsearch全文检索中文分词:IK分词器详解与Docker环境集成
  • 【VUE】Vue3 绘制 3D 蓝图利器 Grid Plan
  • 蛇形方阵构造
  • k8sday10服务发现(1/2)
  • 深度学习在订单簿分析与短期价格预测中的应用探索
  • elasticsearch-集成prometheus监控(k8s)
  • 电子电气架构 --- 软件会给汽车带来哪些变化?
  • Git+Jenkins 基本使用
  • cesium中实时获取鼠标精确坐标和高度
  • 开放最短路径优先协议
  • 在 CentOS 7 上使用 LAMP 架构部署 WordPress
  • 【秋招笔试】2025.08.16科大讯飞秋招机考真题
  • Unity爆炸力场实战指南
  • Avalonia实例实战七:动画