首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Postgresql中的检索:中文分词及语义检索

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

作者头像
程序员架构进阶
发布2025-06-23 14:57:39
发布2025-06-23 14:57:39
33000
代码可运行
举报
文章被收录于专栏:架构进阶架构进阶
运行总次数:0
代码可运行

一 前言

    在上一篇文章中提到,在postgresql中,使用pgvector可以实现向量存储和检索,使用pg_trgm基于三元组文本模糊匹配相似度计算,结合GIN 索引GiST索引实现全文检索。但pg_trgm并不是一个专业的中文分词工具,它是基于字符层面的处理,不理解语义。而且在未安装zhparser等分词插件的情况下,执行SELECT show_trgm('中文测试');时会发现结果为空,因此需要结合zhparser、jiebaR,或使用ElasticSearch等插件或工具实现中文分词/全文检索。

    本篇是对postgresql的延伸,所以先介绍基于zhparser的分词实现,本文基于macos操作系统。

二 zhparser插件安装

2.1 安装 SCWS 分词库(zhparser 的依赖)

代码语言:javascript
代码运行次数:0
运行
复制
wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2
tar xvjf scws-1.2.3.tar.bz2
cd scws-1.2.3
代码语言:javascript
代码运行次数:0
运行
复制
# 编译安装
./configure --prefix=/usr/local
make && sudo make install
# 验证安装
scws -v  # 应输出版本信息
# 在我本机上,输出的版本信息如下:
scws (scws-cli/1.2.3: Simpled Chinese Words Segment - Command line usage)
代码语言:javascript
代码运行次数:0
运行
复制
2.2 安装 zhparser

这次采用源码安装方法,从github下载源码。

代码语言:javascript
代码运行次数:0
运行
复制
git clone https://github.com/amutu/zhparser.git
cd zhparser
# 设置 PostgreSQL 的 pg_config 路径(通常如下)
export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
#编译安装
make && sudo make install
2.3 在 PostgreSQL 中启用插件
# 连接到 PostgreSQL
psql -U your_username -d your_database
#创建扩展
CREATE EXTENSION zhparser;
2.4 验证安装
-- 验证解析器
SELECT oid, prsname FROM pg_ts_parser WHERE prsname = 'zhparser';
-- 2. 创建配置
CREATE TEXT SEARCH CONFIGURATION chinese_zh (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION chinese_zh 
    ADD MAPPING FOR n, v, a, i, e, l, j, d, t WITH simple;
    
-- 3. 测试
SELECT to_tsvector('chinese_zh', '上海自来水来自海上');
-- 分词结果:'上海':1 '来自':3 '自来水':2
-- 4. 设为默认(可选)
ALTER DATABASE postgres SET default_text_search_config = 'chinese_zh';

三 下载并配置中文词典

    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 设置词典文件位置

  1. 将词典文件(如 dict.utf8.xdbrules.utf8.ini 等)复制到上述目录
  2. 或者通过参数指定词典路径:
代码语言:javascript
代码运行次数:0
运行
复制
ALTER SYSTEM SET zhparser.dict_in_memory = 'off';  -- 从文件加载
ALTER SYSTEM SET zhparser.dict_file_path = '/path/to/your/dict.utf8.xdb';

3.2.3 常用配置参数

代码语言:javascript
代码运行次数:0
运行
复制
-- 设置分词精细度
ALTER SYSTEM SET zhparser.multi_short = true;  -- 短词
ALTER SYSTEM SET zhparser.multi_duality = true;  -- 二元
ALTER SYSTEM SET zhparser.multi_zmain = true;  -- 重要单字
ALTER SYSTEM SET zhparser.multi_zall = false;  -- 全部单字
-- 忽略标点符号
ALTER SYSTEM SET zhparser.punctuation_ignore = true;
-- 是否启用同义词
ALTER SYSTEM SET zhparser.synonyms_ignore = false;
3.2.4 重新加载配置
SELECT pg_reload_conf();
-- 测试分词效果
SELECT ts_debug('chinese', '这是一个测试句子');
代码语言:javascript
代码运行次数:0
运行
复制
3.3 自定义词典

如果需要使用自定义词典:

  1. 准备词典文件(.xdb 格式)
  2. 将文件放在指定目录
  3. 通过 zhparser.dict_file_path 参数指定路径

注意:修改配置后需要重启 PostgreSQL 服务或重新加载配置才能生效。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员架构进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 前言
  • 二 zhparser插件安装
    • 2.1 安装 SCWS 分词库(zhparser 的依赖)
  • 三 下载并配置中文词典
    • 3.1 词典下载
      • 3.1.1 从 SCWS 官方下载
      • 3.1.2 从 zhparser 的 GitHub 仓库获取
      • 3.1.3 自定义词典
      • 3.1.4 云服务或发行版提供的词典
    • 3.2 词典安装使用
      • 3.2.1 PostgreSQL 默认安装目录
      • 3.2.2 设置词典文件位置
    • 3.2.3 常用配置参数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档