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

【lucene】向量搜索底层文件关系梳理

下面用“一张图 + 两条流程”把 **`.vec` / `.vem` / `.vex`** 三件套以及 **HNSW vs 暴力搜索** 时如何配合这三个文件彻底讲清。

---

### 1️⃣ 三文件的角色与内容

| 文件 | 别称 | 存什么 | 大小特点 |
|---|---|---|---|
| `.vec` | Vector Data | **原始 float 向量**(维度×4 bytes,按 ord 连续排列) | 最大,> GB 级 |
| `.vem` | Vector Metadata | **索引目录**:<br>- 维度、总数<br>- ord → byte offset 表<br>- 压缩信息 | 小,几十 KB |
| `.vex` | Vector Index (HNSW) | **纯图结构**:<br>- 层数、入口节点<br>- 每层邻居列表(只存 ord) | 中等,几十 MB |

> 三者共同前缀是 `<segment>_<field>_Lucene99HnswVectorsFormat_X` 。

---

### 2️⃣ 文件之间的“指针”关系

```
.vex 节点 ord  ───────────┐

.vem offsets[ord] ───────┘   → byte offset → .vec 读 float[]
```

- **`.vex`** 只给“节点号”  
- **`.vem`** 把节点号翻译成 **`.vec` 中的精确字节地址**  
- **`.vec`** 存放真正的向量值

---

### 3️⃣ 两种搜索如何使用三文件

#### ✅ HNSW 近似搜索流程
1. **入口**:`HnswGraphSearcher.search(...)`  
2. **图遍历**:  
- 从 `.vex` 读层、邻居 ord。  
3. **按需解码向量**:  
- 对每个候选 ord → 查 `.vem` 得 offset → seek `.vec` → 取 float[]。  
4. **计算距离**:用 `RandomVectorScorer` 算分并收集。  
> 只访问 **极少量** 向量和图节点,所以快。

#### ✅ 暴力精确搜索流程
1. **触发条件**:`k >= scorer.maxOrd()`  
2. **线性扫描**:  
- for (ord = 0 .. maxOrd-1)  
3. **同样三文件**:  
- 每个 ord → 查 `.vem` 得 offset → seek `.vec` → 取 float[]。  
4. **无图参与**:**不读 `.vex`**,顺序读 `.vec`。  
> 访问 **全部向量**,但借助 `.vem` 仍是 **O(1) 随机 seek**,而非顺序全读盘。

---

### 4️⃣ 一句话总结

- **`.vec`** 是“仓库”,**`.vem`** 是“索引目录”,**`.vex`** 是“楼层导航图”。  
- **HNSW** 用三件套做“跳读”,**暴力搜索** 跳过 `.vex` 直接扫 `.vec`,但都靠 `.vem` 快速定位向量。

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

相关文章:

  • springboot实现打印每个接口请求的出参和入参
  • SpringBoot配置文件详解
  • jangow-01-1.0.1靶机
  • Java 后端 Cookie Session Token会话跟踪技术
  • Maven之多模块项目管理
  • c# everthing.exe 通信
  • Level MC-9“恶地”
  • 1.qt历史版本安装与多版本开发(解决被拦截问题)
  • 青少年编程能力等级测评试卷及答案 Python编程(三级)
  • 《频率之光:共生之恋》
  • C9300L Stacking堆叠
  • 人形机器人指南(十)决策
  • 快速了解线性回归算法
  • Item16:成对使用new和delete时要采取相同形式
  • Sklearn 机器学习 数值指标 混淆矩阵confusion matrix
  • Java知识体系
  • 初识 docker [上]
  • 【高等数学】第六章 定积分的应用——第三节 定积分在物理学上的应用
  • GO语言 go get 下载 下来的包存放在哪里
  • 线程安全问题的发现与解决
  • 2025 DevOps开源工具全景指南:构建面向未来的智能交付体系
  • 嵌入式软件面试八股文
  • 面试150 数字范围按位与
  • PLLIP核
  • 测试老鸟整理,物流项目系统测试+测试点分析(一)
  • 【笔记】Gibbs自由能全微分公式推导
  • AJAX 原理_第一节_XHR 对象
  • 免安装MySQL启动全解:从解压到远程访问的保姆级教程
  • U盘中毒,文件被隐藏的解决方法
  • Redis6.0+安装教程(Linux)