pg_kazsearch
PostgreSQL 哈萨克语全文检索扩展
仓库
darkhanakh/pg-kazsearch
https://github.com/darkhanakh/pg-kazsearch
源码
pg_kazsearch-2.3.0.tar.gz
pg_kazsearch-2.3.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_kazsearch | 2.3.0 | FTS | LGPL-3.0 | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2200 | pg_kazsearch | 否 | 是 | 否 | 是 | 否 | 否 | - |
Upstream 2.3.0 uses pgrx 0.17.0; PIGSTY packaging builds with pgrx 0.19.1 for PostgreSQL 16 through 18.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 2.3.0 | 1817161514 | pg_kazsearch | - |
| RPM | PIGSTY | 2.3.0 | 1817161514 | pg_kazsearch_$v | - |
| DEB | PIGSTY | 2.3.0 | 1817161514 | postgresql-$v-pg-kazsearch | - |
构建
您可以使用 pig build 命令构建 pg_kazsearch 扩展的 RPM / DEB 包:
pig build pkg pg_kazsearch # 构建 RPM / DEB 包
安装
您可以直接安装 pg_kazsearch 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_kazsearch; # 当前活跃 PG 版本安装
pig ext install -y pg_kazsearch -v 18 # PG 18
pig ext install -y pg_kazsearch -v 17 # PG 17
pig ext install -y pg_kazsearch -v 16 # PG 16
dnf install -y pg_kazsearch_18 # PG 18
dnf install -y pg_kazsearch_17 # PG 17
dnf install -y pg_kazsearch_16 # PG 16
apt install -y postgresql-18-pg-kazsearch # PG 18
apt install -y postgresql-17-pg-kazsearch # PG 17
apt install -y postgresql-16-pg-kazsearch # PG 16
创建扩展:
CREATE EXTENSION pg_kazsearch;
用法
来源:
pg_kazsearch 为 PostgreSQL 16 至 18 提供了哈萨克语全文词干提取。它安装了一个现成的 kazakh_cfg 配置和 pg_kazsearch_dict 字典。使用支持的现代拉丁字母书写法的西里尔文和哈萨克语会转换为标准的西里尔文词干,从而使文档和查询能够在不同书写系统之间匹配。
核心工作流程
CREATE EXTENSION pg_kazsearch;
SELECT ts_lexize('pg_kazsearch_dict', 'алмаларымыздағы');
-- {алма}
SELECT to_tsvector('kazakh_cfg', 'мектептеріміздегі оқушылардың');
-- 'мектеп':1 'оқушы':2
添加加权存储向量和 GIN 索引:
ALTER TABLE articles ADD COLUMN fts tsvector
GENERATED ALWAYS AS (
setweight(to_tsvector('kazakh_cfg', title), 'A') ||
setweight(to_tsvector('kazakh_cfg', body), 'B')
) STORED;
CREATE INDEX articles_fts_idx ON articles USING GIN (fts);
SELECT title
FROM articles
WHERE fts @@ websearch_to_tsquery('kazakh_cfg', 'президенттің жарлығы')
ORDER BY ts_rank_cd(
fts,
websearch_to_tsquery('kazakh_cfg', 'президенттің жарлығы')
) DESC;
字典调优
可以在运行时更改惩罚权重:
ALTER TEXT SEARCH DICTIONARY pg_kazsearch_dict
(w_deriv = 3.5, w_short_char = 100.0);
默认的 script_mode = auto 会检测支持的现代哈萨克语拉丁字母书写法并返回西里尔文词干。当需要严格的西里尔文行为时,可以禁用拉丁字母处理:
ALTER TEXT SEARCH DICTIONARY pg_kazsearch_dict
(script_mode = cyrillic_only);
升级和搜索注意事项
- 在升级到
2.3.0后,重新计算存储的tsvector列或重新填充触发器维护的向量,然后对表执行VACUUM (ANALYZE)。
ALTER EXTENSION pg_kazsearch UPDATE;
UPDATE articles SET title = title;
VACUUM (ANALYZE) articles;
- 升级前长时间运行的会话应重新连接以加载新的字典。
- 拉丁字母支持针对现代书写法。混合书写系统的输入、过时的撇号/重音符/双字符拼写以及低置信度的 ASCII 词素可能保持不变。
websearch_to_tsquery使用严格的 AND 语义处理普通词项。需要更广泛召回的应用程序应故意实现并衡量一个备选查询,而不是默默地将所有搜索都改为 OR 操作。