pg_fts
提供 BM25、BM25F 排序与专用倒排索引的全文检索扩展
仓库
https://codeberg.org/gregburd/pg_fts
https://codeberg.org/gregburd/pg_fts
源码
pg_fts-0.2.0.tar.gz
pg_fts-0.2.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_fts | 0.2.0 | FTS | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2220 | pg_fts | 否 | 是 | 否 | 是 | 是 | 是 | - |
| 相关扩展 | pg_search pg_textsearch vchord_bm25 psql_bm25s pg_bestmatch |
|---|
Requires PostgreSQL 17 or newer; the control file marks the extension trusted and relocatable; RPM builds also provide an llvmjit subpackage.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.2.0 | 1817161514 | pg_fts | - |
| RPM | PIGSTY | 0.2.0 | 1817161514 | pg_fts_$v | - |
| DEB | PIGSTY | 0.2.0 | 1817161514 | postgresql-$v-pg-fts | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.2.0 el8.x86_64.pg18 : pg_fts_18 pg_fts_18-0.2.0-1PIGSTY.el8.x86_64.rpm
| PIGSTY 0.2.0 el8.x86_64.pg17 : pg_fts_17 pg_fts_17-0.2.0-1PIGSTY.el8.x86_64.rpm
| N/A | N/A | N/A |
| el8.aarch64 | PIGSTY 0.2.0 el8.aarch64.pg18 : pg_fts_18 pg_fts_18-0.2.0-1PIGSTY.el8.aarch64.rpm
| PIGSTY 0.2.0 el8.aarch64.pg17 : pg_fts_17 pg_fts_17-0.2.0-1PIGSTY.el8.aarch64.rpm
| N/A | N/A | N/A |
| el9.x86_64 | PIGSTY 0.2.0 el9.x86_64.pg18 : pg_fts_18 pg_fts_18-0.2.0-1PIGSTY.el9.x86_64.rpm
| PIGSTY 0.2.0 el9.x86_64.pg17 : pg_fts_17 pg_fts_17-0.2.0-1PIGSTY.el9.x86_64.rpm
| N/A | N/A | N/A |
| el9.aarch64 | PIGSTY 0.2.0 el9.aarch64.pg18 : pg_fts_18 pg_fts_18-0.2.0-1PIGSTY.el9.aarch64.rpm
| PIGSTY 0.2.0 el9.aarch64.pg17 : pg_fts_17 pg_fts_17-0.2.0-1PIGSTY.el9.aarch64.rpm
| N/A | N/A | N/A |
| el10.x86_64 | PIGSTY 0.2.0 el10.x86_64.pg18 : pg_fts_18 pg_fts_18-0.2.0-1PIGSTY.el10.x86_64.rpm
| PIGSTY 0.2.0 el10.x86_64.pg17 : pg_fts_17 pg_fts_17-0.2.0-1PIGSTY.el10.x86_64.rpm
| N/A | N/A | N/A |
| el10.aarch64 | PIGSTY 0.2.0 el10.aarch64.pg18 : pg_fts_18 pg_fts_18-0.2.0-1PIGSTY.el10.aarch64.rpm
| PIGSTY 0.2.0 el10.aarch64.pg17 : pg_fts_17 pg_fts_17-0.2.0-1PIGSTY.el10.aarch64.rpm
| N/A | N/A | N/A |
| d12.x86_64 | PIGSTY 0.2.0 d12.x86_64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~bookworm_amd64.deb
| PIGSTY 0.2.0 d12.x86_64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~bookworm_amd64.deb
| N/A | N/A | N/A |
| d12.aarch64 | PIGSTY 0.2.0 d12.aarch64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~bookworm_arm64.deb
| PIGSTY 0.2.0 d12.aarch64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~bookworm_arm64.deb
| N/A | N/A | N/A |
| d13.x86_64 | PIGSTY 0.2.0 d13.x86_64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~trixie_amd64.deb
| PIGSTY 0.2.0 d13.x86_64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~trixie_amd64.deb
| N/A | N/A | N/A |
| d13.aarch64 | PIGSTY 0.2.0 d13.aarch64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~trixie_arm64.deb
| PIGSTY 0.2.0 d13.aarch64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~trixie_arm64.deb
| N/A | N/A | N/A |
| u22.x86_64 | PIGSTY 0.2.0 u22.x86_64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~jammy_amd64.deb
| PIGSTY 0.2.0 u22.x86_64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~jammy_amd64.deb
| N/A | N/A | N/A |
| u22.aarch64 | PIGSTY 0.2.0 u22.aarch64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~jammy_arm64.deb
| PIGSTY 0.2.0 u22.aarch64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~jammy_arm64.deb
| N/A | N/A | N/A |
| u24.x86_64 | PIGSTY 0.2.0 u24.x86_64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~noble_amd64.deb
| PIGSTY 0.2.0 u24.x86_64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~noble_amd64.deb
| N/A | N/A | N/A |
| u24.aarch64 | PIGSTY 0.2.0 u24.aarch64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~noble_arm64.deb
| PIGSTY 0.2.0 u24.aarch64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~noble_arm64.deb
| N/A | N/A | N/A |
| u26.x86_64 | PIGSTY 0.2.0 u26.x86_64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~resolute_amd64.deb
| PIGSTY 0.2.0 u26.x86_64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~resolute_amd64.deb
| N/A | N/A | N/A |
| u26.aarch64 | PIGSTY 0.2.0 u26.aarch64.pg18 : postgresql-18-pg-fts postgresql-18-pg-fts_0.2.0-1PIGSTY~resolute_arm64.deb
| PIGSTY 0.2.0 u26.aarch64.pg17 : postgresql-17-pg-fts postgresql-17-pg-fts_0.2.0-1PIGSTY~resolute_arm64.deb
| N/A | N/A | N/A |
构建
您可以使用 pig build 命令构建 pg_fts 扩展的 RPM / DEB 包:
pig build pkg pg_fts # 构建 RPM / DEB 包
安装
您可以直接安装 pg_fts 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_fts; # 当前活跃 PG 版本安装
pig ext install -y pg_fts -v 18 # PG 18
pig ext install -y pg_fts -v 17 # PG 17
dnf install -y pg_fts_18 # PG 18
dnf install -y pg_fts_17 # PG 17
apt install -y postgresql-18-pg-fts # PG 18
apt install -y postgresql-17-pg-fts # PG 17
创建扩展:
CREATE EXTENSION pg_fts;
用法
来源:
pg_fts 通过专用的 ftsdoc 和 ftsquery 类型以及 fts 倒排索引访问方法提供 BM25/BM25F 全文排序。它支持布尔、短语、NEAR、前缀、模糊和正则表达式术语,同时在索引中保留语料库统计信息以进行相关性评分。版本 0.2.0 要求 PostgreSQL 17 或更高版本。
创建并查询索引
CREATE EXTENSION pg_fts;
CREATE TABLE docs (
id bigint PRIMARY KEY,
body text NOT NULL
);
CREATE INDEX docs_fts
ON docs USING fts (to_ftsdoc('english', body));
使用相同的文本搜索配置用于文档和普通查询术语:
WITH q AS (
SELECT to_ftsquery('english', 'postgres & "query planner" & index*') AS query
)
SELECT d.id,
fts_snippet(d.body, q.query) AS excerpt
FROM docs AS d
CROSS JOIN q
WHERE to_ftsdoc('english', d.body) @@@ q.query
ORDER BY to_ftsdoc('english', d.body) <=> q.query
LIMIT 10;
@@@ 匹配,而 <=> 升序距离按降序相关性排序行,并可驱动索引顺序扫描以支持 top-k 查询。
查询语言与 API 索引
to_ftsdoc([regconfig,] text)和to_ftsquery([regconfig,] text): 分析文档并解析查询。quick brown,quick & brown,quick | brown和!slow: 显式/隐式 AND、OR 和 NOT。"quick brown",NEAR(...),term*,term~2和/regular-expression/: 短语、接近度、前缀、模糊和正则表达式术语。fts_bm25,fts_bm25_opts和fts_bm25f: 显式的 BM25 排序变体和多字段排序。fts_index_stats(index)和fts_index_df(index, query): 索引维护的文档计数、平均长度、词汇表大小和词频。fts_highlight和fts_snippet: 展示匹配文本。fts_search(index, query, k)和fts_count(index, query): 索引本地 top-k 和 MVCC 意识的计数操作。tsquery_to_ftsquery(tsquery): 迁移辅助程序;它不会使pg_fts成为tsvector/GIN 的透明替代品。
维护与版本注意事项
SELECT fts_merge('docs_fts');
SELECT fts_vacuum('docs_fts');
- 插入进入立即可匹配的待处理列表,但排名
<=>和fts_search结果覆盖合并段。当新插入文档必须立即参与排序时,请运行fts_merge()。 fts_vacuum()会压缩段并回收可重用的索引页面;普通VACUUM也会参与待处理列表和删除标记维护。- 版本
0.2.0将访问方法从bm25重命名为fts。由0.1.0创建且使用USING bm25的索引必须重新创建。 - 如果库报告磁盘格式不匹配,请遵循其
REINDEX提示,而不是尝试用不同版本的格式读取索引。 - 访问方法是非覆盖的,并且在此版本中不提供并行扫描。在逻辑复制订阅者上分别安装扩展和索引;索引本身不会进行逻辑复制。