【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。
  1. **按需解码向量**:
  • 对每个候选 ord → 查 `.vem` 得 offset → seek `.vec` → 取 float[]。
  1. **计算距离**:用 `RandomVectorScorer` 算分并收集。

> 只访问 **极少量** 向量和图节点,所以快。

✅ 暴力精确搜索流程

  1. **触发条件**:`k >= scorer.maxOrd()`

  2. **线性扫描**:

  • for (ord = 0 .. maxOrd-1)
  1. **同样三文件**:
  • 每个 ord → 查 `.vem` 得 offset → seek `.vec` → 取 float[]。
  1. **无图参与**:**不读 `.vex`**,顺序读 `.vec`。

> 访问 **全部向量**,但借助 `.vem` 仍是 **O(1) 随机 seek**,而非顺序全读盘。


4️⃣ 一句话总结

  • **`.vec`** 是"仓库",**`.vem`** 是"索引目录",**`.vex`** 是"楼层导航图"。

  • **HNSW** 用三件套做"跳读",**暴力搜索** 跳过 `.vex` 直接扫 `.vec`,但都靠 `.vem` 快速定位向量。

相关推荐
闻哥8 小时前
深入理解 ES 词库与 Lucene 倒排索引底层实现
java·大数据·jvm·elasticsearch·面试·springboot·lucene
龙山云仓20 小时前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene
TracyCoder1232 天前
ElasticSearch核心引擎Apache Lucene(五):相关性算分 (Scoring)
elasticsearch·apache·lucene
TracyCoder1233 天前
ElasticSearch核心引擎Apache Lucene(四):段 (Segment) 的设计与合并
elasticsearch·apache·lucene
TracyCoder1233 天前
ElasticSearch核心引擎Apache Lucene(三):数值与空间数据索引
elasticsearch·apache·lucene
Elastic 中国社区官方博客3 天前
Elasticsearch:Apache Lucene 2025 年终总结
大数据·人工智能·elasticsearch·搜索引擎·apache·lucene
TracyCoder1233 天前
ElasticSearch核心引擎Apache Lucene(二):正排索引的奥秘
elasticsearch·apache·lucene
TracyCoder1233 天前
ElasticSearch核心引擎Apache Lucene(一):倒排索引底层实现
elasticsearch·apache·lucene
程序员agions23 天前
Unity 游戏开发邪修秘籍:从入门到被策划追杀的艺术
unity·cocoa·lucene
AC赳赳老秦23 天前
Unity游戏开发实战指南:核心逻辑与场景构建详解
开发语言·spring boot·爬虫·搜索引擎·全文检索·lucene·deepseek