基于zhparser的PostgreSQL中文全文搜索Docker镜像,用于实现PostgreSQL数据库的中文分词与全文检索功能。本镜像从chen-xin/docker_zhparser fork而来,并已升级至新版本。
| 标签 | Dockerfile链接 |
|---|---|
| latest | Dockerfile.debian |
| 17 | Dockerfile.debian |
| 16 | Dockerfile.debian |
| 15 | Dockerfile.debian |
| 14 | Dockerfile.debian |
| 13 | Dockerfile.debian |
| alpine | Dockerfile.alpine |
| 17-alpine | Dockerfile.alpine |
| 16-alpine | Dockerfile.alpine |
| 15-alpine | Dockerfile.alpine |
| 14-alpine | Dockerfile.alpine |
| 13-alpine | Dockerfile.alpine |
注:标签中的数字对应PostgreSQL***镜像版本。
适用于需要在PostgreSQL中实现中文全文检索的场景,如:
参考PostgreSQL***镜像文档,基础运行命令如下:
bashdocker run -p 5432:5432 abcfy2/zhparser
容器首次启动时,需在默认数据库中执行以下SQL脚本配置zhparser。对于新创建的数据库,需手动执行相同脚本:
sql-- 创建zhparser扩展 CREATE EXTENSION zhparser; -- 创建文本搜索配置(名称可自定义,如"chinese_zh") CREATE TEXT SEARCH CONFIGURATION chinese_zh (PARSER = zhparser); -- 添加分词类型映射(n:名词, v:动词, a:形容词等) ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR n,v,a,i,e,l WITH simple;
配置说明:
- "chinese_zh"为自定义配置名称,可按需修改
- "n,v,a,i,e,l"为分词类型,未映射的类型将不参与文档分词。使用
\dFp+ zhparser可查看zhparser支持的所有分词类型
sqlselect ts_debug('chinese_zh', '白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代');
输出示例:
txtts_debug ------------------------------------------- (t,time,白垩纪,{},,) (v,verb,是,{simple},simple,{是}) (n,noun,地球,{simple},simple,{地球}) (n,noun,上海,{simple},simple,{上海}) (m,numeral,陆,{},,) (v,verb,分布,{simple},simple,{分布}) (c,conjunction,和,{},,) (n,noun,生物界,{simple},simple,{生物界}) (d,adverb,急剧,{},,) (v,verb,变化,{simple},simple,{变化}) (u,auxiliary,、,{},,) (n,noun,火山,{simple},simple,{火山}) (v,verb,活动,{simple},simple,{活动}) (a,adjective,频繁,{simple},simple,{频繁}) (u,auxiliary,的,{},,) (n,noun,时代,{simple},simple,{时代}) (16 rows)
sqlselect to_tsvector('chinese_zh', '白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代');
输出示例:
txtto_tsvector -------------------------------------------------------------------------------------------- '上海':3 '分布':4 '变化':6 '地球':2 '时代':10 '是':1 '活动':8 '火山':7 '生物界':5 '频繁':9 (1 row)
注:若需包含"白垩纪",需添加
t类型映射:ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR t WITH simple;
sql-- 判断"地球"是否在文本中 select to_tsquery('chinese_zh', '地球') @@ to_tsvector('chinese_zh', '白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代');
输出示例:
txt?column? ---------- t (1 row)
sql-- 创建测试表 create table testing( title text ); -- 插入测试数据 insert into testing values('白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代'); insert into testing values('艾泽拉斯包括卡利姆多、东部王国两大大陆,暗夜精灵主城达纳苏斯位于东部王国北端。'); -- 创建GIN索引(基于中文全文搜索配置) create index ind_testing on testing using gin (to_tsvector('chinese_zh', title));
sql-- 搜索包含"白垩纪"的记录 select * from testing where to_tsquery('chinese_zh', '白垩纪') @@ to_tsvector('chinese_zh', title); -- 搜索包含"达纳苏斯"的记录 select * from testing where to_tsquery('chinese_zh', '达纳苏斯') @@ to_tsvector('chinese_zh', title);
注:若表数据量较少,PostgreSQL可能选择顺序扫描而非索引扫描。当数据量达到数万级时,GIN索引将显著提升查询性能。
/usr/share/postgresql/<version>/tsearch_data/,文件名可自定义,如mydict.utf8.txt):txt# 格式:word TF IDF ATTR(TF/IDF为权重,ATTR为分词类型) 艾泽拉斯 1 1 n 卡利姆多 1 1 n 达纳苏斯 1 1 n 遗忘海岸 1 1 n
postgresql.conf,添加词典路径:confzhparser.extra_dicts = 'mydict.utf8.txt'
sqlselect ts_debug('chinese_zh', '艾泽拉斯');
输出示例:
txt(n,noun,艾泽拉斯,{simple},simple,{艾泽拉斯})
XDB格式为二进制词典,性能优于TXT格式,步骤如下:
bash# 进入词典目录 cd /usr/share/postgresql/<version>/tsearch_data/ # 生成XDB词典(需确保scws-gen-dict工具可用) ldconfig # 解决可能的库依赖问题 scws-gen-dict -c UTF8 mydict.utf8.txt mydict.utf8.xdb # 修改文件权限(确保postgres用户可访问) chown postgres:postgres mydict.utf8.xdb
bashsed -i 's/mydict\.utf8\.txt/mydict.utf8.xdb/' /var/lib/postgresql/data/postgresql.conf
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429