多路召回之-PGSQL的关键词检索分词插件安装

RAG检索增强应用中,往往需要使用多路召回文档,传统的词向量语义相似和关键词检索是常用的组合,spring-ai默认实现了语义相似的召回,postgresql中可直接创建向量插件,但RAG关键词检索我们自己实现时可能需要补充基于分词的召回方案,意味着需要额外安装分词插件。除部分云数据库外,自部署pgsql往往不能直接create extension创建分词插件。本文介绍两种常用的分词插件的编译安装方式。

推荐首选jieba分词,针对新词感知和领域分词更加准确。

注:下文分词部署都是基于centos系列的系统(作为数据基础设施不推荐docker部署),使用linux安装源安装好pgsql后,编译部署流程如下。

公共依赖

安装好pgsql后,执行源码编译依赖安装

复制代码
sudo yum install boost-devel

结巴分词部署方案

由于云服务器一般有github访问限制,所以使用支持访问的代码库,部署方案参考:https://www.modb.pro/db/616771

创建目录和源码下载,生成build文件

复制代码
mkdir /opt/wwwroot/pgsql/jieba

cd /opt/wwwroot/pgsql/jieba

git clone https://gitee.com/shawnyan/pg_jieba --depth=1

git clone https://gitee.com/shawnyan/cppjieba --depth=1 pg_jieba/libjieba

git clone https://gitee.com/shawnyan/limonp --depth=1 pg_jieba/libjieba/deps/limonp

cd pg_jieba

mkdir build
cd build

查找pgsql中的extension 和 tsearch_data 路径

基于centos的路径一般默认为 /usr/share/pgsql/

查找pgsql的log和postgresql.conf目录

基于centos的路径一般默认为 /var/lib/pgsql/data

查找pgsql的lib,即so文件防止位置目录

#通过指令查询

复制代码
pg_config --pkglibdir
#得到如下路径
/usr/lib64/pgsql

确定lib路径后生成编译引导,注意使用cmake3指令,需检查安装支持

复制代码
#执行生成器
cmake3 -DCMAKE_PREFIX_PATH=/usr/lib64/pgsql/ ..
#执行编译运行
make

忽略warning级别提示,如无报错,即完成编译,可以将程序和配置拷贝到pgsql指定目录中

复制代码
# 拷贝程序库文件
cp /opt/wwwroot/pgsql/jieba/pg_jieba/build/pg_jieba.so /usr/lib64/pgsql

拷贝词典配置

复制代码
cp /opt/wwwroot/pgsql/jieba/pg_jieba/libjieba/dict/jieba.dict.utf8 /usr/share/pgsql/tsearch_data/jieba_base.dict
cp /opt/wwwroot/pgsql/jieba/pg_jieba/libjieba/dict/user.dict.utf8 /usr/share/pgsql/tsearch_data/jieba_user.dict
cp /opt/wwwroot/pgsql/jieba/pg_jieba/libjieba/dict/hmm_model.utf8 /usr/share/pgsql/tsearch_data/jieba_hmm.model
cp /opt/wwwroot/pgsql/jieba/pg_jieba/libjieba/dict/stop_words.utf8 /usr/share/pgsql/tsearch_data/jieba.stop
cp /opt/wwwroot/pgsql/jieba/pg_jieba/pg_jieba.control /usr/share/pgsql/extension/pg_jieba.control
cp /opt/wwwroot/pgsql/jieba/pg_jieba/pg_jieba.sql /usr/share/pgsql/extension/pg_jieba--1.1.1.sql

进入pgsql程序conf目录 添加配置

复制代码
cd /var/lib/pgsql/data
vim postgresql.conf
shared_preload_libraries = 'pg_jieba'

重启pgsql

复制代码
systemctl restart postgresql

sql终端测试

复制代码
DROP EXTENSION IF EXISTS pg_jieba CASCADE;
create extension pg_jieba;

-- 查看是否存在jieba分词配置
select * from pg_ts_parser;
SELECT * from pg_ts_config;

-- 重新载入词典或分词配置
SELECT jieba_reload_dict();
SELECT pg_reload_conf();

-- 验证分词
select * from to_tsvector('jiebacfg', '这里是测试分词');
SELECT * FROM ts_debug('jiebacfg', '这里是测试分词');

-- 如报错,可定位log查看日志,日志调为debug模式
ALTER SYSTEM SET log_min_messages = 'DEBUG1';

zhparser分词部署方案

源码库参考https://github.com/amutu/zhparser

创建目录和源码下载,云环境可使用镜像地址或本地上传文件后编译,完成指令流程如下

复制代码
# 编译源码下载
cd /opt/wwwroot/pgsql
git clone https://github.com/amutu/zhparser.git
cd zhparser

# 其他依赖scws安装
mkdir scws
cd scws
wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2

# 如不支持bz2的解压,需下载bzip2解压工具
sudo yum install -y bzip2

# 解压scws
tar xvjf scws-1.2.3.tar.bz2
cd scws-1.2.3
./configure

# 校验编译安装
## 编译安装scws
make

## 校验程序库文件
ls /usr/local/lib/libscws.so
## 检查scws是否可自行 提示参数报错正常
/usr/local/bin/scws -h

编译zhparser

复制代码
# 返回上层开始编译zhparser
cd ..
-- 编译,如果提示报错需要查看文件编码 cat -A Makefile
SCWS_HOME=/usr/local make && sudo make install
-- 自动加载配置
ldconfig

sql终端测试

复制代码
CREATE EXTENSION zhparser;

SELECT * FROM ts_parse('zhparser', 'hello world! 这里是测试分词');

后续将介绍如何实现spring-ai中RAG的 本地文档+pgsql-bm25关键词检索+语义相似度向量检索+云文档的多路召回的实现方案。

相关推荐
程序猿追5 小时前
深度解码昇腾 AI 算力引擎:CANN Runtime 核心架构与技术演进
人工智能·架构
金融RPA机器人丨实在智能5 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
lili-felicity5 小时前
CANN异步推理实战:从Stream管理到流水线优化
大数据·人工智能
做人不要太理性5 小时前
CANN Runtime 运行时组件深度解析:任务下沉执行、异构内存规划与全栈维测诊断机制
人工智能·神经网络·魔珐星云
不爱学英文的码字机器5 小时前
破壁者:CANN ops-nn 仓库与昇腾 AI 算子优化的工程哲学
人工智能
晚霞的不甘5 小时前
CANN 编译器深度解析:TBE 自定义算子开发实战
人工智能·架构·开源·音视频
愚公搬代码5 小时前
【愚公系列】《AI短视频创作一本通》016-AI短视频的生成(AI短视频运镜方法)
人工智能·音视频
哈__5 小时前
CANN内存管理与资源优化
人工智能·pytorch
极新5 小时前
智启新篇,智创未来,“2026智造新IP:AI驱动品牌增长新周期”峰会暨北京电子商务协会第五届第三次会员代表大会成功举办
人工智能·网络协议·tcp/ip
island13146 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络