惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
WordPress大学
WordPress大学
C
Check Point Blog
GbyAI
GbyAI
U
Unit 42
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog
Vercel News
Vercel News
博客园 - 【当耐特】
美团技术团队
小众软件
小众软件
S
SegmentFault 最新的问题
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog

博客园 - ejiyuan

vLLM + MTP + DFlash 部署测试 ChatGPT(codex) 第三方LLM配置 Jetson Orin Nano 刷机、Docker GPU 环境与大语言模型部署实践(Ollama / vLLM) linux 系统相关工具和命令 arduino首选项 ESXi安装openwrt idea 如何使用Let's Encrypt和Nginx为您的网站提供免费的SSL/TLS证书 docker 安装 onlyoffice docker使用alpine构建jdk21镜像 Minio服务搭建与应用 frp内网穿透 基于Docker 的redis cluster部署 docker 部署mongoDB集群与读写分离 MariaDB MaxScale实现mysql8读写分离 ESP8266引脚的说明 Arduino uno r3 使用 ESP8266 UART-WiFi 透传模块 ESP8266 超声波测距模块HC-SR04 树莓派PICO Wifi 无线网卡 esp82666接线图 树莓派PICO读取温度传感器 树莓派使用python+继电器控制220V灯泡 docker的/var/lib/docker目录迁移
AI Search By PostgreSQL
ejiyuan · 2026-05-15 · via 博客园 - ejiyuan

3.2 构建


3.3 运行


3.4 验证

进入:

查看所有加载的共享库

SHOW shared_preload_libraries;

3.5 初始化中文分词


3.6 pg_textsearch 的正确打开方式(重点)

这个新版:不是:

模式。而是:


3.7 示例

建表

创建 BM25 索引

查询

4. PostgreSQL 18 + pgvector + pg_jieba + pg_textsearch

下面是一个完整的:

  • PostgreSQL 18

  • pgvector

  • pg_jieba

  • pg_textsearch

  • 中文全文检索

  • BM25

  • AI Retrieval

实验环境 Dockerfile。

这个版本主要用于:

  • 学习 PostgreSQL Retrieval Engine

  • 对比 zhparser 与 pg_jieba

  • 中文全文检索实验

  • AI Agent / RAG 检索研究


4.1 Dockerfile

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

4.2 Build

docker build -t pg18-ai-jieba .

4.3 Run

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

4.4 初始化 pg_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;

4.5 测试

ts_debug:分词

-- 使用内置配置
SELECT ts_debug(
    'jiebacfg',
    'PostgreSQL支持中文全文检索和AI向量搜索'
);

-- 使用自定义配置
SELECT ts_debug(
    'chinese_jieba',
    'PostgreSQL支持中文全文检索和AI向量搜索'
);

tsvector:分词测试

SELECT to_tsvector(
    'jiebacfg',
    'PostgreSQL支持中文全文检索和AI向量搜索'
);

tsquery:全文检索测试 

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;

4.7 创建 AI Retrieval 表

CREATE TABLE tool_registry (
    id BIGSERIAL PRIMARY KEY,

    function_name TEXT,
    description TEXT,
    content TEXT,

    embedding vector(1024)
);

4.8 HNSW 索引

CREATE INDEX idx_embedding_hnsw
ON tool_registry
USING hnsw (embedding vector_cosine_ops);

4.9 BM25 索引

CREATE INDEX idx_tool_bm25
ON tool_registry
USING bm25(content)
WITH (text_config='chinese_jieba');

4.10 Hybrid Search 示例

Vector Search

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;

BM25 Search

SELECT
    id,
    function_name,
    content <@> '请假审批流程'
FROM tool_registry
ORDER BY content <@> '请假审批流程';

5. 其他说明

pg_jieba 的优势

  • 中文互联网语义更现代

  • 新词识别更好

  • 更适合 AI/RAG

  • 中文自然语言效果更强

但它也有问题:

  • PostgreSQL 大版本兼容性不如 zhparser

  • ARM/国产CPU 可能踩坑

  • 社区成熟度不如 zhparser

  • 部署复杂度更高

所以:

  • 企业稳定生产:很多仍然选 zhparser

  • AI/RAG/实验研究:很多开始转向 pg_jieba