Rust in Everything
基于 tantivy 0.27.0

动手

前面各部分是读别人的代码,这一部分反过来:把一个全文检索库最核心的那条路自己走一遍,用最少的代码把「词 → 文档列表 → 分数 → 前 K 篇」做出来,再拿 tantivy 的结果当标准答案。目的不是造一个能用的库,而是看清 tantivy 的每一层多做了什么、为什么要多做。

  1. 最小倒排索引:标准库写的分词、HashMap 倒排表、差分加 VInt 的段文件、BM25 加小顶堆取前 K;同样 1000 篇文档、同一个查询 old man,前 10 和 tantivy 是同一批,只有第 8、9 名因 fieldnorm 的一字节量化对调;每一步对应的真实实现(内存池、bitpacking 与跳表、FST、mmap、窗口化并集)各链到一页。
flowchart TB
  tok["分词"] --> mem["内存倒排表"]
  mem --> seg["段文件"]
  seg --> bm["BM25"]
  bm --> top["前 K 个"]

完整实现放在对应课程里。读这一页之前,最好先读过一次写入、一个段和一次查询,知道 tantivy 的三条主线各自长什么样。

💬 关联讨论

发起讨论
加载中...