Skip to content
🔗 分享本题
查看我的学习进度 →

pgvector 业务字段与向量同库及混合查询执行流程图

🧠 记忆锚点:向量与业务同库换一致性和简单运维;过滤要看选择性与执行计划。

💡 答案要点

pgvector = PostgreSQL 向量扩展,让 Postgres 原生支持 ANN 检索,无需额外向量库

核心价值:一套系统搞定业务数据 + 向量数据

sql
-- 安装扩展
CREATE EXTENSION vector;

-- 创建带向量的表
CREATE TABLE documents (
    id         BIGSERIAL PRIMARY KEY,
    title      TEXT,
    category   TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    embedding  VECTOR(1536)
);

-- 创建 HNSW 索引(pgvector 0.6+)
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);

-- ✅ 一条 SQL 搞定混合检索:向量相似 + 业务条件过滤
SELECT title, 1 - (embedding <=> $1) AS similarity
FROM documents
WHERE category = '技术文档'
  AND created_at > '2024-01-01'
ORDER BY embedding <=> $1
LIMIT 10;

三种距离运算符:

运算符类型推荐场景
<=>余弦距离OpenAI 归一化 Embedding(首选)
<->欧氏距离 L2未归一化向量
<#>负内积归一化向量(等价余弦)

选型边界:

数据量建议
< 100 万pgvector(省一套系统)
100-500 万pgvector + HNSW 调优
> 500 万考虑 Milvus / Qdrant

LangChain 集成:

python
from langchain_postgres import PGVector
from langchain_openai import OpenAIEmbeddings

vector_store = PGVector(
    connection="postgresql+psycopg://user:pass@localhost:5432/ragdb",
    embeddings=OpenAIEmbeddings(model="text-embedding-3-small"),
    collection_name="documents",
)

# 向量检索 + 元数据过滤
results = vector_store.similarity_search(
    query="如何优化 RAG 检索",
    k=5,
    filter={"category": "技术文档"}
)

面试话术:

"pgvector 的优势是向量与关系数据共享 PostgreSQL 的事务、过滤、备份和权限体系,适合已有 Postgres 能力的团队。是否迁移到专用向量系统不能按固定条数判断,还取决于维度、索引、更新率、过滤、并发、分片和 SLO;应在真实查询与硬件上压测。"

📚 参考:pgvector(PostgreSQL 向量与业务条件混合查询)