SQL 参考与方案对比
pg_bestmatch(bm25_catalog)的完整 SQL 函数参考手册,以及与 vchord_bm25 的架构对比。
SQL 函数参考(bm25_catalog)
pg_bestmatch 的所有 SQL 函数均位于 bm25_catalog 模式下。
bm25_create
为指定的表与文本列创建 BM25 语料库统计信息。
table_name:包含文档数据的目标表名。column_name:待分析的text文本列名。statistic_name:该 BM25 统计集的唯一标识名称(需为合法的 SQL 标识符)。b:BM25 文档长度归一化系数(默认0.75)。k:BM25 词频饱和度参数 (默认1.2)。
bm25_refresh
在文档发生增删改后,刷新 statistic_name 对应的物化语料库统计数据。
bm25_drop
删除与 statistic_name 关联的所有内部统计表、物化视图与触发器。
bm25_document_to_svector
将文档字符串转化为兼容 pgvecto.rs(svector)或 pgvector(sparsevec)的 BM25 词频权重稀疏向量字面量(text)。
statistic_name:已注册的统计集名称。passage:输入文档文本。style:输出格式——'pgvector'(下标从 1 开始)或'pgvecto.rs'(下标从 0 开始)。
bm25_query_to_svector
将检索查询字符串转化为带 IDF 权重的稀疏向量字面量(text)。
tokenize
使用内置的 bert-base-uncased WordPiece 词表,将输入字符串切分为子词词元数组(text[])。
方案对比:pg_bestmatch vs vchord_bm25
pg_bestmatch 与 vchord_bm25 均由 TensorChord 团队开发,旨在将 Okapi BM25 排序引入 PostgreSQL,但两者采用了截然不同的底层架构:
| 对比维度 | pg_bestmatch(pg_bestmatch.rs) |
vchord_bm25 + pg_tokenizer |
|---|---|---|
| 核心机制 | 将 BM25 的 TF/IDF 权重映射为稀疏向量(sparsevec / svector) |
原生倒排索引 + Block-WeakAnd(WAND) 块级剪枝扫描 |
| 索引类型 | 复用 pgvector 或 pgvecto.rs 的 HNSW 稀疏向量索引 |
专用 USING bm25 (vec bm25_ops) 索引访问方法 |
| 检索精度 | 近似检索(基于稀疏向量 HNSW 图遍历) | 100% 精确 Top-K BM25 计分 |
| 分词能力 | 固定内置 bert-base-uncased 词表(30,522 维) |
可插拔 pg_tokenizer(支持 Unicode、Jieba、Lindera、HuggingFace、Snowball 及自定义语料词表) |
| 适用场景 | 仅安装了 pgvector 环境下的轻量级实验与基准对比 |
生产级全文检索与多路混合检索首选 |