跳转到主要内容

vchord_bm25

BM25排序算法

概览

扩展包名版本分类许可证语言
vchord_bm250.3.0FTSAGPL-3.0Rust
ID扩展名BinLibLoadCreateTrustReloc模式
2160vchord_bm25否是是是否否bm25_catalog

bm25 am conflicts with pg_textsearch and pg_search, build require clang upgrade.

版本

类型仓库版本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
u26.x86_64
u26.aarch64

构建

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

pig build pkg vchord_bm25         # 构建 RPM / DEB 包

安装

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

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

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

安装
pig install vchord_bm25;          # 当前活跃 PG 版本安装
pig
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
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
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;

用法

来源:

vchord_bm25 使用稀疏词元频率类型和 bm25 索引访问方法提供 BM25 排序。分词由独立组件提供,通常使用 pg_tokenizer。扩展对象安装在固定的 bm25_catalog 模式中,创建时需要超级用户权限。

核心流程

示例使用 pg_tokenizer,它要求预加载并重启。修改预加载列表时保留已有条目:

shared_preload_libraries = 'pg_tokenizer'
CREATE EXTENSION pg_tokenizer;
CREATE EXTENSION vchord_bm25;
SET search_path = public, tokenizer_catalog, bm25_catalog;

SELECT create_tokenizer('english', $$
model = "bert_base_uncased"
$$);
CREATE TABLE documents (
    id bigserial PRIMARY KEY,
    passage text,
    embedding bm25vector
);
INSERT INTO documents(passage) VALUES ('PostgreSQL full text search');
UPDATE documents SET embedding = tokenize(passage, 'english')::bm25vector;
CREATE INDEX documents_bm25 ON documents USING bm25 (embedding bm25_ops);

SELECT id, passage,
       embedding <&> to_bm25query('documents_bm25',
           tokenize('PostgreSQL', 'english')::bm25vector) AS score
FROM documents
ORDER BY score
LIMIT 10;

索引为 to_bm25query 提供语料统计。<&> 返回负分数,因此升序排列将相关性更高的结果放在前面。文档与查询应使用相同的分词器和模型。源文本变化时需要更新存储的词元向量,也可使用分词器提供的维护触发器辅助函数。词汇表变化后,应先重新分词存量文档,再重建索引。

类型、函数与搜索限制

  • bm25vector 保存词元 ID 和频率,整数数组转换会合并重复 ID,并丢弃词元顺序。
  • bm25query 将查询向量绑定到索引,由 to_bm25query(regclass, bm25vector) 构造;bm25_ops 是索引运算符类。
  • bm25_catalog.bm25_limit 默认为 100,限制索引返回的候选数量。较大的 SQL 限制或严格过滤需要增加此参数,仅改变 SQL LIMIT 不会增加候选预算。
  • bm25_catalog.enable_index 控制是否使用索引,bm25_catalog.enable_prefilter 控制预过滤,两者默认均为 true。
  • bm25_catalog.segment_growing_max_page_size 默认为 4096 页,超过后将增长段封存。
SET bm25_catalog.bm25_limit = 1000;

访问方法名称在数据库中是全局的,不能与其他创建同名 bm25 访问方法的扩展共存,包括 pg_textsearch 和 pg_search 的兼容别名。稀疏频率不保留短语匹配所需的位置。中文可使用带 Jieba 预分词器的自定义语料模型,日文 Lindera 支持取决于分词器的构建选项和词典配置。

升级到 0.3.0

ALTER EXTENSION vchord_bm25 UPDATE TO '0.3.0';

0.2.2 到 0.3.0 的迁移新增 bm25_page_inspect(regclass, integer),返回页面诊断文本。本次发布改变小词元在封存段中的页面分配,未声明强制重建索引要求。更新数据库对象前应安装匹配的扩展文件;替换预加载的分词器库还需要重启。应保持分词与排序组件的升级兼容,并检查代表性查询结果。

这个页面对您有帮助吗?