pg_textsearch

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

概览

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

bm25 am conflicts with pg_search; must be preloaded via shared_preload_libraries.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.0.01817161514pg_textsearch-
RPMPIGSTY1.0.01817161514pg_textsearch_$v-
DEBPIGSTY1.0.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 1.0.0
PIGSTY 1.0.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.x86_64
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.aarch64
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.x86_64
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.aarch64
PIGSTY 1.0.0
PIGSTY 1.0.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

预加载配置

shared_preload_libraries = 'pg_textsearch';

创建扩展

CREATE EXTENSION pg_textsearch;

用法

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

pg_textsearch 提供基于 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-04-14: update extension catalog (fa7cf58)