
基于zhparser的PostgreSQL中文全文搜索Docker镜像,用于实现PostgreSQL数据库的中文分词与全文检索功能。本镜像从https://github.com/chen-xin/docker_zhparser fork而来,并已升级至新版本。
| 标签 | Dockerfile链接 |
|---|---|
| latest | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.debian |
| 17 | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.debian |
| 16 | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.debian |
| 15 | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.debian |
| 14 | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.debian |
| 13 | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.debian |
| alpine | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.alpine |
| 17-alpine | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.alpine |
| 16-alpine | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.alpine |
| 15-alpine | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.alpine |
| 14-alpine | https://github.com/abcfy2/docker_zhparser/blob/main/Dockerfile.alpine |
| 13-alpine | https://github.com/abcfy2/docker_zhparser/blob/main/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支持的所有分词类型
1. 分词调试(ts_debug)
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)
2. 文本向量转换(to_tsvector)
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;
3. 查询匹配(to_tsquery & @@)
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索引将显著提升查询性能。
1. TXT格式词典
/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,{艾泽拉斯})
2. XDB格式词典(推荐)
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 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务