pg_bigm
基于二字组的多语言全文检索扩展
仓库
pgbigm/pg_bigm
https://github.com/pgbigm/pg_bigm
源码
pg_bigm-1.2-20250903.tar.gz
pg_bigm-1.2-20250903.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_bigm | 1.2 | FTS | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2120 | pg_bigm | 否 | 是 | 是 | 是 | 否 | 是 | - |
| 相关扩展 | pg_search pgroonga zhparser pg_trgm pgroonga_database pg_tokenizer fuzzystrmatch rum |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.2 | 1817161514 | pg_bigm | - |
| RPM | PGDG | 1.2 | 1817161514 | pg_bigm_$v | - |
| DEB | PIGSTY | 1.2 | 1817161514 | postgresql-$v-pg-bigm | - |
构建
您可以使用 pig build 命令构建 pg_bigm 扩展的 RPM / DEB 包:
pig build pkg pg_bigm # 构建 RPM / DEB 包
安装
您可以直接安装 pg_bigm 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_bigm; # 当前活跃 PG 版本安装
pig ext install -y pg_bigm -v 18 # PG 18
pig ext install -y pg_bigm -v 17 # PG 17
pig ext install -y pg_bigm -v 16 # PG 16
pig ext install -y pg_bigm -v 15 # PG 15
pig ext install -y pg_bigm -v 14 # PG 14
dnf install -y pg_bigm_18 # PG 18
dnf install -y pg_bigm_17 # PG 17
dnf install -y pg_bigm_16 # PG 16
dnf install -y pg_bigm_15 # PG 15
dnf install -y pg_bigm_14 # PG 14
apt install -y postgresql-18-pg-bigm # PG 18
apt install -y postgresql-17-pg-bigm # PG 17
apt install -y postgresql-16-pg-bigm # PG 16
apt install -y postgresql-15-pg-bigm # PG 15
apt install -y postgresql-14-pg-bigm # PG 14
预加载配置:
shared_preload_libraries = 'pg_bigm';
创建扩展:
CREATE EXTENSION pg_bigm;
用法
pg_bigm 模块为 PostgreSQL 提供全文搜索能力。该模块允许用户创建 2-gram(bigram)索引以加速全文搜索。
功能特性
- Bigram 索引:为文本列创建 2-gram(bigram)GIN 索引
- 更快的 LIKE 搜索:加速
LIKE查询,包括前缀、后缀和子串搜索 - 全语言支持:无需额外配置即可支持所有语言,包括中日韩(CJK)
- 简单 API:提供相似度搜索函数和运算符
函数与运算符
函数
| 函数 | 返回类型 | 说明 |
|---|---|---|
likequery(text) | text | 根据关键词生成全文搜索查询 |
show_bigm(text) | text[] | 显示给定字符串中的所有 2-gram |
pg_gin_pending_stats(regclass) | record | 返回 GIN 索引待处理列表中的页面数和元组数 |
运算符
| 运算符 | 说明 |
|---|---|
text =% text | 当左右操作数的相似度大于等于 pg_bigm.similarity_limit 时返回 true |
GUC 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
pg_bigm.last_update | text | - | 显示模块的最后更新日期(只读) |
pg_bigm.enable_recheck | bool | on | 控制索引扫描时是否执行复查 |
pg_bigm.gin_key_limit | int | 0 | 限制全文搜索使用的最大 bigram 数量。0 表示无限制 |
pg_bigm.similarity_limit | real | 0.3 | 设置 =% 运算符的最小相似度阈值 |
示例
基本全文搜索
-- 创建扩展
CREATE EXTENSION pg_bigm;
-- 创建含文本数据的表
CREATE TABLE documents (id serial PRIMARY KEY, content text);
INSERT INTO documents (content) VALUES
('PostgreSQL is a powerful database'),
('Full text search with bigram indexing'),
('Japanese text: 日本語テキスト検索');
-- 创建 bigram 索引
CREATE INDEX docs_bigm_idx ON documents USING gin (content gin_bigm_ops);
-- 使用 LIKE 搜索
SELECT * FROM documents WHERE content LIKE '%search%';
-- 使用 likequery 函数搜索
SELECT * FROM documents WHERE content LIKE likequery('database');
相似度搜索
-- 显示字符串的 bigram
SELECT show_bigm('PostgreSQL');
-- 相似度搜索
SET pg_bigm.similarity_limit = 0.2;
SELECT * FROM documents WHERE content =% 'database search';
与 pg_trgm 的比较
pg_bigm 相比内置的 pg_trgm 有以下优势:
| 特性 | pg_bigm | pg_trgm |
|---|---|---|
| N-gram 类型 | 2-gram(bigram) | 3-gram(trigram) |
| 最小搜索字符串 | 1 个字符 | 3 个字符 |
| 非字母语言 | 完全支持 | 有限支持 |
| LIKE 搜索类型 | 前缀、后缀和子串 | 前缀、后缀和子串 |
详细文档包括高级用法和性能调优,请参见 pg_bigm 官方文档。