PostgreSQL pgvector 向量检索
pgvector 是 PostgreSQL 扩展,在关系表里直接存储和检索向量,适合已有 PostgreSQL、数据量中等且希望减少独立向量数据库的场景。支持 L2、内积和余弦距离。
安装扩展:
psql -c "CREATE EXTENSION vector;"
建表和索引:
psql <<'SQL'
CREATE TABLE docs (
id bigserial PRIMARY KEY,
content text,
embedding vector(1536)
);
CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops);
SQL
插入向量:
psql -c "INSERT INTO docs (content, embedding) VALUES ('磁盘满排查', '[0.1,0.2]');"
相似度查询:
psql -c "SELECT id, content, 1 - (embedding <=> '[0.1,0.2]') AS score
FROM docs ORDER BY embedding <=> '[0.1,0.2]' LIMIT 5;"
带条件过滤:
psql -c "SELECT id FROM docs WHERE source = 'faq'
ORDER BY embedding <=> '[0.1,0.2]' LIMIT 5;"
查看索引使用情况:
psql -c "SELECT indexname, indexdef FROM pg_indexes WHERE tablename='docs';"
vector 扩展,建表时报类型不存在。<-> L2、<#> 内积、<=> 余弦。ANALYZE,查询计划选择错误的索引。合上页面,先回答,再展开对照。
<->、<#>、<=> 分别对应什么距离?WHERE 过滤的相似度查询没有用上索引,先看什么?vector 扩展。ANALYZE。