跳转到主要内容

pg_bestmatch 文档

在 PostgreSQL 内部生成 Okapi BM25 稀疏向量,并基于 pgvector(sparsevec)或 pgvecto.rs(svector)执行高性能关键词相关性检索。

pg_bestmatch(pg_bestmatch.rs)是一个基于 Rust(pgrx)开发的 PostgreSQL 扩展,它通过将文档与查询文本转化为兼容 pgvector(sparsevec)与 pgvecto.rs(svector)的 BM25 加权稀疏向量,在 PostgreSQL 内部原生实现 Okapi BM25 全文相关性排序。

演进推荐:vchord_bm25 + pg_tokenizer

pg_bestmatch.rs 是 TensorChord 第一代基于稀疏向量内积的 BM25 检索方案。对于新建生产环境,我们推荐使用新一代 vchord_bm25 搭配 pg_tokenizer——它采用专门设计的 Block-WeakAnd(WAND) 倒排索引替代了稀疏向量 HNSW 近似图检索,支持 100% 精确的 Top-K BM25 计分与更高吞吐量。

核心能力

  • 数据库内原生生成 BM25 稀疏向量:在 bm25_catalog 模式中维护语料库词频(TF)、逆文档频率(IDF)与平均文档长度统计信息,直接为文档与查询生成 BM25 稀疏向量。
  • 无缝对接 pgvector 与 pgvecto.rs:支持直接输出标准 sparsevec(pgvector 0.7.0+)或 svector(pgvecto.rs),使用负内积操作符 <#> 即可计算 BM25 得分并利用 HNSW 索引加速。
  • 内置分词器:内置 HuggingFace bert-base-uncased WordPiece 词表(30,522 维),并提供独立的 tokenize(text) SQL 分词函数。

文档章节导航

了解 pg_bestmatch 如何将 BM25 排序转化为稀疏向量内积,以及通过预编译包或源码安装并启用扩展。

基于斯坦福 LoCo 基准数据集的端到端实战教程,演示结合 pgvector sparsevec 与 pgvecto.rs svector 的完整检索流程。

bm25_create、bm25_refresh、bm25_drop、bm25_document_to_svector、bm25_query_to_svector 与 tokenize 完整参考及方案对比。