Logo
Section 1 / 3

PostgreSQL中pgvector扩展简介

了解 PostgreSQL 中的 pgvector 扩展,其距离函数及索引机制。

导入

PostgreSQL中pgvector扩展简介

了解 PostgreSQL 中的 pgvector 扩展,其距离函数及索引机制。

...

启用 pgvector

1CREATE EXTENSION vector;

创建表并插入数据

1CREATE TABLE products (id bigserial PRIMARY KEY, embedding vector(3)); 2 3INSERT INTO products (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

余弦相似度

1-- 对于余弦相似度,使用 1 - 余弦距离 2SELECT 1 - (embedding <=> '[3,1,2]') AS cosine_similarity FROM products;

欧几里得距离

1-- L2 距离 2SELECT (embedding <-> '[3,1,2]') AS similarity FROM products;

内积(点积)

1-- 乘以 -1(因为 <#> 返回的是负的内积) 2SELECT (embedding <#> '[3,1,2]') * -1 AS similarity FROM products;

表格对比

方面余弦相似度L2 距离内积(点积)
pgvector 操作符<=><-><#>
定义衡量向量之间的夹角衡量向量间的欧几里得距离衡量一个向量在另一个向量上的投影
解读方式值越大表示越相似值越小表示越相似值越大表示越相似
适用场景适用于文本相似度,词频(向量模长)影响较小的情况适用于空间数据或需要关注绝对距离的场景适用于方向和模长都重要的情况

索引创建示例

1-- 余弦相似度 2CREATE INDEX ON products USING hnsw (embedding vector_cosine_ops); 3 4-- L2 距离 5CREATE INDEX ON products USING hnsw (embedding vector_l2_ops); 6 7-- 内积 8CREATE INDEX ON products USING hnsw (embedding vector_ip_ops);

IVFFlat 类型索引创建示例

1-- 余弦相似度 2CREATE INDEX ON products USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100); 3 4-- L2 距离 5CREATE INDEX ON products USING ivfflat (embedding vector_l2_ops) WITH (lists = 100); 6 7-- 内积 8CREATE INDEX ON products USING ivfflat (embedding vector_ip_ops) WITH (lists = 100);

向量数据库

动手实践:电影推荐服务