vchord_bm25

BM25排序算法

概览

扩展包名版本分类许可证语言
vchord_bm250.3.0FTSAGPL-3.0Rust
ID扩展名BinLibLoadCreateTrustReloc模式
2150vchord_bm25bm25_catalog
相关扩展vector vchord pg_search pg_bestmatch vectorscale zhparser pg_tokenizer pgroonga

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.3.01817161514vchord_bm25-
RPMPIGSTY0.3.01817161514vchord_bm25_$v-
DEBPIGSTY0.3.01817161514postgresql-$v-vchord-bm25-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
d13.aarch64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u22.x86_64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u22.aarch64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u24.x86_64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
u24.aarch64
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0
PIGSTY 0.3.0

构建

您可以使用 pig build 命令构建 vchord_bm25 扩展的 RPM / DEB 包:

pig build pkg vchord_bm25         # 构建 RPM / DEB 包

安装

您可以直接安装 vchord_bm25 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install vchord_bm25;          # 当前活跃 PG 版本安装
pig ext install -y vchord_bm25 -v 18  # PG 18
pig ext install -y vchord_bm25 -v 17  # PG 17
pig ext install -y vchord_bm25 -v 16  # PG 16
pig ext install -y vchord_bm25 -v 15  # PG 15
pig ext install -y vchord_bm25 -v 14  # PG 14
dnf install -y vchord_bm25_18       # PG 18
dnf install -y vchord_bm25_17       # PG 17
dnf install -y vchord_bm25_16       # PG 16
dnf install -y vchord_bm25_15       # PG 15
dnf install -y vchord_bm25_14       # PG 14
apt install -y postgresql-18-vchord-bm25   # PG 18
apt install -y postgresql-17-vchord-bm25   # PG 17
apt install -y postgresql-16-vchord-bm25   # PG 16
apt install -y postgresql-15-vchord-bm25   # PG 15
apt install -y postgresql-14-vchord-bm25   # PG 14

预加载配置

shared_preload_libraries = 'vchord_bm25';

创建扩展

CREATE EXTENSION vchord_bm25;

用法

GitHub: tensorchord/VectorChord-bm25

VectorChord-BM25 是一个实现 BM25 排序算法的 PostgreSQL 扩展,基于 Block-WeakAnd 算法。它设计与 pg_tokenizer 配合使用,支持自定义文本分词。

架构

该扩展由三个主要组件组成:

  1. 分词器:将文本转换为 bm25vector(存储词汇 ID 和词频的稀疏向量)
  2. bm25vector:用于存储分词后文本的自定义数据类型
  3. bm25vector 索引:加速搜索和排序操作

快速开始

-- 启用所需扩展
CREATE EXTENSION IF NOT EXISTS pg_tokenizer CASCADE;
CREATE EXTENSION IF NOT EXISTS vchord_bm25 CASCADE;

-- 创建分词器(如用于英文的 LLMLingua2)
SELECT create_tokenizer('tokenizer1', $$
model = "llmlingua2"
$$);

-- 创建包含文本内容的表
CREATE TABLE documents (
  id SERIAL PRIMARY KEY,
  passage TEXT,
  embedding bm25vector
);

-- 将文本段落分词为 bm25vector
UPDATE documents SET embedding = tokenize(passage, 'tokenizer1');

-- 创建 BM25 索引
CREATE INDEX documents_embedding_bm25 ON documents USING bm25 (embedding bm25_ops);

-- 使用 BM25 排序查询
SELECT id, passage, embedding <&> to_bm25query('documents_embedding_bm25', tokenize('search query', 'tokenizer1')) AS score
FROM documents
ORDER BY score
LIMIT 10;

注意:VectorChord-BM25 中的 BM25 分数为负数,越负表示相关性越高。

<&> 运算符

<&> 运算符计算存储的 bm25vector 与查询 bm25vector 之间的 BM25 相关性分数。查询必须用 to_bm25query() 包装,它接受索引名称和分词后的查询:

-- 基本搜索查询
-- to_bm25query(索引名称, 分词后的查询)
SELECT id, passage, embedding <&> to_bm25query('documents_embedding_bm25', tokenize('database system', 'tokenizer1')) AS score
FROM documents
ORDER BY score
LIMIT 10;

语言支持

VectorChord-BM25 通过不同的分词器配置支持多种语言:

语言方式模型/预分词器
英语预训练模型model = "llmlingua2"model = "bert_base_uncased"
中文带结巴预分词器的自定义模型[pre_tokenizer.jieba]
日语带 Lindera 预分词器的自定义模型Lindera + IPADIC 词典
自定义通过文本分析器训练的用户模型create_custom_model_tokenizer_and_trigger()

中文文本搜索示例

中文文本需要带结巴预分词器的自定义模型(而非预训练模型):

-- 创建带结巴预分词器的文本分析器
SELECT create_text_analyzer('zh_text_analyzer', $$
[pre_tokenizer.jieba]
$$);

-- 创建在语料上训练的自定义模型分词器
SELECT create_custom_model_tokenizer_and_trigger(
    tokenizer_name => 'zh_tokenizer',
    model_name => 'zh_model',
    text_analyzer_name => 'zh_text_analyzer',
    table_name => 'documents',
    source_column => 'passage',
    target_column => 'embedding'
);

自定义分词器模型

对于领域特定术语,你可以创建带停用词、词干提取和其他过滤器的文本分析器,然后使用 create_custom_model_tokenizer_and_trigger() 在语料上训练自定义模型。

与替代方案的比较

特性VectorChord-BM25PostgreSQL tsvector + ts_rank
排序算法BM25tf-idf 变体
自定义分词器支持(通过 pg_tokenizer)仅限内置配置
索引类型专用 BM25 索引GIN 索引
原生 PostgreSQL是(扩展)内置
语言支持通过模型可扩展通过文本搜索配置

最后修改 2026-03-14: update extension metadata (953cbd0)