pgvector 结合 zhparser 分词

构建镜像

pgvector 和 zhparser 都有自己的 Docker 镜像。只需要将二者的 Dockerfile 合并即可。

pgvector:pgvector/pgvector: Open-source vector similarity search for Postgres

zhparser:abcfy2/docker_zhparser: A source repo of Postgres Chinese full-test search docker image, based on zhparser.

这里的做法是在 zhparser 的基础上构建 pgvector 的镜像,即只需更改 pgvector 的基础镜像即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ARG PG_MAJOR=17
# 此处修改为 zhparser 的镜像
FROM ghcr.io/abcfy2/zhparser:$PG_MAJOR
ARG PG_MAJOR

COPY . /tmp/pgvector

RUN apt-get update && \
apt-mark hold locales && \
apt-get install -y --no-install-recommends build-essential postgresql-server-dev-$PG_MAJOR && \
cd /tmp/pgvector && \
make clean && \
make OPTFLAGS="" && \
make install && \
mkdir /usr/share/doc/pgvector && \
cp LICENSE README.md /usr/share/doc/pgvector && \
rm -r /tmp/pgvector && \
apt-get remove -y build-essential postgresql-server-dev-$PG_MAJOR && \
apt-get autoremove -y && \
apt-mark unhold locales && \
rm -rf /var/lib/apt/lists/*

自定义配置

zhparser 默认的配置默认及其含义如下:

参数 含义
zhparser.punctuation_ignore = f 忽略所有的标点等特殊符号
zhparser.seg_with_duality = f 闲散文字自动以二字分词法聚合
zhparser.dict_in_memory = f 将词典全部加载到内存里
zhparser.multi_short = f 短词复合
zhparser.multi_duality = f 散字二元复合
zhparser.multi_zmain = f 重要单字复合
zhparser.multi_zall = f 全部单字复合

可以在 PHP简易中文分词(SCWS) 第4版在线演示 (by hightman) 此处实验效果

可以在 postgresql.conf 中开启以上配置项

1
2
3
4
5
zhparser.punctuation_ignore = t
zhparser.seg_with_duality = t
zhparser.multi_short = t
zhparser.multi_duality = t
zhparser.multi_zmain = t

重新启动 Docker 即可,这里因为修改了配置文件,所以启动的时候需要指定启动文件的位置

1
docker run -itd -e PGUSER=postgres -e POSTGRES_PASSWORD=power_2024! -e POSTGRES_DB=zhishi -p 15434:5432 -v D:/project/postgresql.conf:/etc/postgresql.conf pgvector-17-zhparser:v1.0.0 postgres -c config_file=/etc/postgresql.conf

查询测试

17350214102161735021409689.png

成品

yanrs/pgvector-17-zhparser Tags

自定义分词

可以在 zhparser.zhprs_custom_word 中插入自定义分词

17350266198961735026618990.png

插入后,需要执行 select sync_zhprs_custom_word(); 然后重新连接数据库才会生效。

17350266648971735026664195.png