Postgresql 中的检索: 中文分词及语义检索

一 前言
在上一篇文章中提到,在 postgresql 中,使用 pgvector 可以实现向量存储和检索,使用 pg_trgm 基于三元组文本模糊匹配和相似度计算,结合 GIN 索引和 GiST 索引实现全文检索。但 pg_trgm 并不是一个专业的中文分词工具,它是基于字符层面的处理,不理解语义。而且在未安装 zhparser 等分词插件的情况下,执行 SELECT show_trgm('中文测试');时会发现结果为空,因此需要结合 zhparser、jiebaR,或使用 ElasticSearch 等插件或工具实现中文分词/全文检索。
本篇是对 postgresql 的延伸,所以先介绍基于 zhparser 的分词实现,本文基于 macos 操作系统。
二 zhparser 插件安装
2.1 安装 SCWS 分词库(zhparser 的依赖)
2.2 安装 zhparser
这次采用源码安装方法,从 github 下载源码。
2.3 在 PostgreSQL 中启用插件
2.4 验证安装
三 下载并配置中文词典
zhparser 的词典文件主要来源于 SCWS(Simple Chinese Word Segmentation)中文分词库,以下是获取词典的途径和方法:
3.1 词典下载
3.1.1 从 SCWS 官方下载
zhparser 是基于 SCWS 实现的,因此可以直接从 SCWS 官网下载词典文件:
SCWS 官方下载地址:http://www.xunsearch.com/scws/download.php ,提供了 GBK、UTF8 编码的简体中文(dict.utf8.xdb)和 UTF8 繁体中文词典。

3.1.2 从 zhparser 的 GitHub 仓库获取
zhparser 的 GitHub 项目可能包含词典文件的示例或指引:
zhparser GitHub 地址:https://github.com/amutu/zhparser。其中也提供了 dic.utf8.xdb 的词典文件。

3.1.3 自定义词典
如果需要更专业的词典(如行业术语、新词),可以:
手动构建词典:使用 SCWS 提供的工具
scws-gen-dict
生成自定义词典。下载第三方词典:如搜狗词库、百度词库等,并转换为 SCWS 支持的
.xdb
。
3.1.4 云服务或发行版提供的词典
某些 PostgreSQL 发行版(如 KingbaseES、阿里云 PostgreSQL)可能已经集成 zhparser 并附带词典,可直接使用。
3.2 词典安装使用
3.2.1 PostgreSQL 默认安装目录
在某些 PostgreSQL 发行版中,词典文件可能已经预装在以下目录:
/usr/share/postgresql/<version>/tsearch_data/
/usr/local/share/postgresql/tsearch_data/
可以检查这些路径是否已有dict.utf8.xdb
和rules.utf8.ini
。
如果是使用 brew 安装的 postgresql,路径有所不同。以我安装的 postgresql16 为例,预装的词典文件在目录:/opt/homebrew/Cellar/postgresql@16/16.9/share/postgresql@16/tsearch_data/dict.utf8.xdb。
3.2.2 设置词典文件位置
将词典文件(如
dict.utf8.xdb
、rules.utf8.ini
等)复制到上述目录或者通过参数指定词典路径:
3.2.3 常用配置参数
3.2.4 重新加载配置
3.3 自定义词典
如果需要使用自定义词典:
准备词典文件(.xdb 格式)
将文件放在指定目录
通过
zhparser.dict_file_path
参数指定路径
注意:修改配置后需要重启 PostgreSQL 服务或重新加载配置才能生效。
版权声明: 本文为 InfoQ 作者【程序员架构进阶】的原创文章。
原文链接:【http://xie.infoq.cn/article/f32a442429c5395fcfd15a7d9】。文章转载请联系作者。
评论