动手
前面各部分是读别人的代码,这一部分反过来:把一个全文检索库最核心的那条路自己走一遍,用最少的代码把「词 → 文档列表 → 分数 → 前 K 篇」做出来,再拿 tantivy 的结果当标准答案。目的不是造一个能用的库,而是看清 tantivy 的每一层多做了什么、为什么要多做。
- 最小倒排索引:标准库写的分词、
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 的三条主线各自长什么样。
💬 关联讨论
发起讨论加载中...