Neon 向量检索怎么配:pgvector 扩展与相似度查询实操
Neon 是兼容 PostgreSQL 的云数据库,向量检索能力来自 pgvector 扩展,不需要额外安装独立向量数据库。
只要在 Neon 控制台启用 pgvector,就能用标准 SQL 建表、写向量并做相似度排序。
先确认版本与连接方式
Neon 默认提供较新的 PostgreSQL 版本,pgvector 扩展在支持范围内可直接启用。
你需要准备:
- 一个 Neon 项目,以及可用的数据库连接串(在控制台 Connect 按钮处获取)。
- 本地安装
psql客户端,或使用 Neon SQL Editor。 - 一个用来测试的向量,比如三维数组
[0.1, 0.2, 0.3]。
连接数据库:
psql "postgresql://用户名:密码@主机/数据库名?sslmode=require"
如果不想装客户端,直接用 Neon 控制台的 SQL Editor 执行后续命令也可以。
启用 pgvector 并建表
在目标数据库执行:
CREATE EXTENSION IF NOT EXISTS vector;
验证扩展是否安装成功:
SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';
返回一行记录说明扩展已启用。
接着创建带向量列的表:
CREATE TABLE items (
id bigserial PRIMARY KEY,
content text NOT NULL,
embedding vector(3) NOT NULL
);
vector(3) 表示三维向量,实际使用时按你的嵌入模型输出维度修改,比如 OpenAI text-embedding-3-small 是 1536 维。
维度必须和写入数据一致,否则会报错。
写入向量并执行相似度查询
插入几条测试数据:
INSERT INTO items (content, embedding) VALUES
('苹果', '[0.9, 0.1, 0.0]'),
('香蕉', '[0.1, 0.9, 0.0]'),
('橙子', '[0.8, 0.2, 0.1]');
用余弦距离查询与 [0.85, 0.15, 0.05] 最接近的记录:
SELECT id, content, embedding <=> '[0.85, 0.15, 0.05]' AS distance
FROM items
ORDER BY embedding <=> '[0.85, 0.15, 0.05]'
LIMIT 5;
<=> 是余弦距离运算符,值越小表示越相似。
如果要按相似度从高到低排序,可以写成 ORDER BY embedding <=> '[...]',距离升序即相似度降序。
数据量较大时建议加索引:
CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops);
HNSW 索引适合近似最近邻查询,创建后查询会走索引。
注意索引创建会消耗一定时间和资源,建议在低峰期操作。
容易踩坑的几个地方
- 维度不一致:建表时写
vector(3),插入 4 维数据会直接报错。修改维度需要重建列或新表。 - 扩展未启用:执行
CREATE EXTENSION前要确认当前数据库正确,Neon 每个数据库需要单独启用。 - 连接串缺少 SSL:Neon 要求 SSL 连接,
psql连接串记得加?sslmode=require。 - 索引运算符不匹配:使用余弦距离查询时,索引要选
vector_cosine_ops;用欧氏距离则选vector_l2_ops,否则索引可能不生效。
怎么验证配置真正生效
执行 EXPLAIN 查看查询计划:
EXPLAIN SELECT * FROM items ORDER BY embedding <=> '[0.85, 0.15, 0.05]' LIMIT 5;
如果输出中出现 Index Scan using items_embedding_idx,说明 HNSW 索引被使用。
没有走索引时,先检查索引是否存在、运算符是否匹配,以及表数据量是否过小(数据量很小时优化器可能选择全表扫描,这属于正常现象)。
最后再用一条已知最近邻的查询核对结果顺序,确认距离计算和排序符合预期。
常见疑问
Neon 免费套餐能用 pgvector 吗?
pgvector 属于 PostgreSQL 扩展,Neon 各套餐对扩展的支持以控制台实际可启用项为准。
启用时如果报权限错误,检查当前角色是否有 CREATE EXTENSION 权限。
向量维度必须固定吗?
同一列内必须固定,因为 vector(n) 定义了维度。
不同表可以用不同维度。
HNSW 和 IVFFlat 怎么选?
HNSW 查询速度快、召回率高,但建索引慢、占内存;
IVFFlat 建索引快,适合数据量大且能接受一定召回损失的场景。
新手可以先从 HNSW 开始。