












进入:
查看所有加载的共享库
SHOW shared_preload_libraries;
这个新版:不是:
模式。而是:
下面是一个完整的:
PostgreSQL 18
pgvector
pg_jieba
pg_textsearch
中文全文检索
BM25
AI Retrieval
实验环境 Dockerfile。
这个版本主要用于:
学习 PostgreSQL Retrieval Engine
对比 zhparser 与 pg_jieba
中文全文检索实验
AI Agent / RAG 检索研究
FROM pgvector/pgvector:pg18
USER root
# 使用清华源加速
RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' \
/etc/apt/sources.list.d/debian.sources
# 安装依赖(移除 libcppjieba-dev)
RUN apt-get update && apt-get install -y \
git \
wget \
curl \
gcc \
g++ \
make \
cmake \
build-essential \
pkg-config \
ca-certificates \
postgresql-server-dev-18 \
&& rm -rf /var/lib/apt/lists/*
# 安装 pg_jieba(支持 PG18)
RUN git clone https://github.com/jaiminpan/pg_jieba.git /tmp/pg_jieba \
&& cd /tmp/pg_jieba \
&& git submodule update --init --recursive \
&& mkdir build && cd build \
&& cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/18/server \
-DCMAKE_CXX_FLAGS="-Wall -std=c++11" .. \
&& make -j$(nproc) \
&& make install \
&& rm -rf /tmp/pg_jieba
# 安装 pg_textsearch (Timescale 版本)
RUN git clone https://github.com/timescale/pg_textsearch.git /tmp/pg_textsearch \
&& cd /tmp/pg_textsearch \
&& make \
&& make install \
&& rm -rf /tmp/pg_textsearch
# 关键配置:shared_preload_libraries
RUN echo "shared_preload_libraries = 'pg_jieba, pg_textsearch'" >> /usr/share/postgresql/18/postgresql.conf.sample
RUN echo "default_text_search_config = 'jiebacfg'" >> /usr/share/postgresql/18/postgresql.conf.sample
# 初始化扩展
RUN mkdir -p /docker-entrypoint-initdb.d
RUN echo "CREATE EXTENSION IF NOT EXISTS vector;" > /docker-entrypoint-initdb.d/init-extensions.sql
RUN echo "CREATE EXTENSION IF NOT EXISTS pg_jieba;" >> /docker-entrypoint-initdb.d/init-extensions.sql
RUN echo "CREATE EXTENSION IF NOT EXISTS pg_textsearch;" >> /docker-entrypoint-initdb.d/init-extensions.sql
USER postgres
EXPOSE 5432
docker build -t pg18-ai-jieba .
docker run -d \
--name pg18 \
-p 5432:5432 \
-e POSTGRES_USER=root_sa \
-e POSTGRES_PASSWORD=123456 \
-v /data/postgresql/data:/var/lib/postgresql \
--restart always \
pg18-ai-jieba
此步骤可跳过,直接使用内置的 jiebacfg
进入:
docker exec -it pg18 psql -U root_sa
执行:
-- 1. 创建中文分词配置(推荐方式)
CREATE TEXT SEARCH CONFIGURATION chinese_jieba (
PARSER = pg_jieba
);
-- 2. 添加词性映射(常用映射)
ALTER TEXT SEARCH CONFIGURATION chinese_jieba
ADD MAPPING FOR n, v, a, i, e, l, j
WITH simple;
-- 3. (可选)添加更多映射,覆盖大部分情况
ALTER TEXT SEARCH CONFIGURATION chinese_jieba
ADD MAPPING FOR nr, ns, nt, nz, nw, t, s, f, m, q, r, d, p, c, u, y, z, k, w
WITH simple;
-- 使用内置配置
SELECT ts_debug(
'jiebacfg',
'PostgreSQL支持中文全文检索和AI向量搜索'
);
-- 使用自定义配置
SELECT ts_debug(
'chinese_jieba',
'PostgreSQL支持中文全文检索和AI向量搜索'
);
SELECT to_tsvector(
'jiebacfg',
'PostgreSQL支持中文全文检索和AI向量搜索'
);
SELECT * FROM to_tsquery(
'jiebacfg',
'PostgreSQL支持中文全文检索和AI向量搜索'
);
SELECT cfgname, cfgnamespace::regnamespace, cfgparser::regproc
FROM pg_ts_config
WHERE cfgname LIKE '%jieba%';
SELECT prsname FROM pg_ts_parser;
CREATE TABLE tool_registry (
id BIGSERIAL PRIMARY KEY,
function_name TEXT,
description TEXT,
content TEXT,
embedding vector(1024)
);
CREATE INDEX idx_embedding_hnsw
ON tool_registry
USING hnsw (embedding vector_cosine_ops);
CREATE INDEX idx_tool_bm25
ON tool_registry
USING bm25(content)
WITH (text_config='chinese_jieba');
SELECT
id,
function_name,
embedding <=> '[0.1,0.2,0.3]' AS distance
FROM tool_registry
ORDER BY embedding <=> '[0.1,0.2,0.3]'
LIMIT 10;
SELECT
id,
function_name,
content <@> '请假审批流程'
FROM tool_registry
ORDER BY content <@> '请假审批流程';
pg_jieba 的优势
中文互联网语义更现代
新词识别更好
更适合 AI/RAG
中文自然语言效果更强
但它也有问题:
PostgreSQL 大版本兼容性不如 zhparser
ARM/国产CPU 可能踩坑
社区成熟度不如 zhparser
部署复杂度更高
所以:
企业稳定生产:很多仍然选 zhparser
AI/RAG/实验研究:很多开始转向 pg_jieba
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。