跳转到主要内容

vchord_bm25 与 pg_tokenizer

面向 PostgreSQL 的原生 BM25 排序索引与 Block-WeakAnd 全文检索扩展(vchord_bm25 与 pg_tokenizer)。

vchord_bm25(由 Pigsty 在 pgsty/vchord_bm25 维护)是一个使用 Rust(pgrx)构建的原生 PostgreSQL 扩展,在 PostgreSQL 内部实现了 Okapi BM25 相关性排序算法以及 Block-WeakAnd(Block-Max WAND) Top-K 索引扫描访问方法。

配合 pg_tokenizer(由 Pigsty 在 pgsty/pg_tokenizer 维护,提供可定制的多语言分词与词表模型)或 PostgreSQL 内置的 tsvector 分析器,vchord_bm25 将 Elasticsearch/Lucene 级别的词法全文检索排序能力直接带入关系型数据库,并能与 vchord 无缝结合,实现语义 + 词法混合检索。

了解为什么需要 BM25,安装 vchord_bm25 与 pg_tokenizer,并运行你的第一条全文排序查询。

构建 bm25 索引、执行 Top-K 查询、使用 WHERE 预过滤,并将 BM25 与 VectorChord 稠密向量检索融合。

配置文本分析器、词干提取器、停用词、同义词、HuggingFace 模型、中文结巴(Jieba)与日文 Lindera 分词。

完整的 SQL 类型、操作符、函数、GUC 参数、版本演进历史以及 BEIR 基准测试结果。

核心特性

  • 纯正的 Okapi BM25 评分:完整支持逆文档频率(IDF)、词频饱和度控制(k1k_1)以及单字节量化的文档长度归一化(bb 与平均文档长度 avgdl\text{avgdl}),从根本上解决了 PostgreSQL 原生 ts_rank 的相关性排序局限。
  • Block-WeakAnd 索引加速:使用差分位打包(Delta-Bitpacking)存储压缩倒排链表,并在每个块中记录最大得分上界,在 Top-K 查询期间直接跳过缺乏竞争力的文档块,无需扫描整条倒排链。
  • 多语言分词支持:在 v0.1–v0.3 中可配合 pg_tokenizer(支持 llmlingua2、bert_base_uncased、wiki_tocken、gemma2b、自定义语料训练模型、中文 jieba、日文 lindera)使用;在新一代 main 架构中更可直接支持 PostgreSQL 原生 tsvector。
  • 与 VectorChord 原生混合检索:在单条 SQL 查询中同时运行词法 BM25 检索(vchord_bm25)与稠密向量检索(vchordrq),支持倒数排序融合(RRF)或 ColBERT MaxSim 重排序。

vchord_bm25 与 pg_tokenizer 的架构概览、安装方式与快速入门指南。

pg_tokenizer 完整指南:文本分析器、字符/词元过滤器、预训练与自定义词表模型,以及多语言分词。

vchord_bm25 与 pg_tokenizer 的完整 SQL 参考手册、GUC 参数、性能基准测试与版本演进历史。