pg_textsearch

带有BM25排序的全文搜索扩展

概览

扩展包名版本分类许可证语言
pg_textsearch0.5.0FTSPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
2180pg_textsearch-
相关扩展pg_search pgroonga pg_bigm zhparser pg_trgm rum biscuit fuzzystrmatch

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY0.5.01817161514pg_textsearch-
RPMPIGSTY0.5.01817161514pg_textsearch_$v-
DEBPIGSTY0.5.01817161514postgresql-$v-textsearch-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISS
el8.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISS
el9.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISS
el9.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISS
el10.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISS
el10.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISS
d12.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISS
d12.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISS
d13.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISS
d13.aarch64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.x86_64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.aarch64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.x86_64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.aarch64
PIGSTY 0.5.0
PIGSTY 0.5.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS

构建

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

pig build pkg pg_textsearch         # 构建 RPM / DEB 包

安装

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

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

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

pig install pg_textsearch;          # 当前活跃 PG 版本安装
pig ext install -y pg_textsearch -v 18  # PG 18
pig ext install -y pg_textsearch -v 17  # PG 17
dnf install -y pg_textsearch_18       # PG 18
dnf install -y pg_textsearch_17       # PG 17
apt install -y postgresql-18-textsearch   # PG 18
apt install -y postgresql-17-textsearch   # PG 17

创建扩展

CREATE EXTENSION pg_textsearch;

用法

pg_textsearch: 使用 BM25 的 PostgreSQL 现代排序文本搜索

使用 BM25 评分和 Block-Max WAND 优化的现代排序文本搜索。语法简单,支持快速 top-k 查询、并行索引构建和分区表。

添加到 shared_preload_libraries

shared_preload_libraries = 'pg_textsearch'
CREATE EXTENSION pg_textsearch;

快速开始

CREATE TABLE documents (id bigserial PRIMARY KEY, content text);
INSERT INTO documents (content) VALUES
    ('PostgreSQL is a powerful database system'),
    ('BM25 is an effective ranking function'),
    ('Full text search with custom scoring');

-- 创建 BM25 索引
CREATE INDEX docs_idx ON documents USING bm25(content) WITH (text_config='english');

-- 使用 <@> 运算符查询(返回负 BM25 分数,越低匹配越好)
SELECT * FROM documents
ORDER BY content <@> 'database system'
LIMIT 5;

查询

-- 从列自动检测索引
SELECT * FROM documents
ORDER BY content <@> 'database system'
LIMIT 5;

-- 显式指定索引
SELECT * FROM documents
WHERE content <@> to_bm25query('database system', 'docs_idx') < -1.0;

过滤

前置过滤在评分前缩减行数(适合选择性强的过滤器):

CREATE INDEX ON documents (category_id);
SELECT * FROM documents
WHERE category_id = 123
ORDER BY content <@> 'search terms'
LIMIT 10;

后置过滤先应用 BM25 扫描,再过滤:

SELECT * FROM documents
WHERE content <@> to_bm25query('search terms', 'docs_idx') < -5.0
ORDER BY content <@> 'search terms'
LIMIT 10;

索引选项

选项默认值说明
text_config(必需)PostgreSQL 文本搜索配置
k11.2词频饱和参数
b0.75长度归一化参数
CREATE INDEX ON documents USING bm25(content)
  WITH (text_config='english', k1=1.5, b=0.8);

-- 语言特定配置
CREATE INDEX ON french_docs USING bm25(content) WITH (text_config='french');
CREATE INDEX ON german_docs USING bm25(content) WITH (text_config='german');

数据类型

bm25query — 表示 BM25 评分查询:

SELECT to_bm25query('search query text', 'docs_idx');
-- docs_idx:search query text

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