使用pgvector插件
简介
RDS for PostgreSQL支持pgvector插件,提供支持vector数据类型和向量相似性搜索。该插件提供以下支持:
- 精确的和近似的最近邻搜索
- L2距离,内积和余弦距离
- Postgres客户端的任何语言
更多信息,请参见pgvector官方文档。
支持的版本
PostgreSQL 12及以上版本的最新小版本支持该插件。可通过以下SQL语句查询当前实例是否支持该插件:
SELECT * FROM pg_available_extension_versions WHERE name = 'vector';
如果不支持,可通过升级内核小版本或者使用转储与还原升级大版本使用该插件。
RDS PostgreSQL实例支持的插件,具体请参见支持的插件列表。
插件安装/卸载
- 安装插件
SELECT control_extension ('create', 'vector');
- 删除插件
SELECT control_extension ('drop', 'vector');
更多信息,请参见通过界面安装和卸载插件和通过SQL命令安装和卸载插件。
基本使用
- 创建具有3维的向量列
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
- 插入向量
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
- 通过L2距离得到最近邻
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]';
- 通过余弦距离得到最近邻
SELECT * FROM items ORDER BY embedding <=> '[3,1,2]';
- 通过内积得到最近邻
<#>返回的是负内积,因为Postgres只支持运算符上的ASC顺序索引扫描
SELECT * FROM items ORDER BY embedding <#> '[3,1,2]';
进阶使用
- 计算距离
SELECT embedding <-> '[3,1,2]' AS distance FROM items; SELECT (embedding <#> '[3,1,2]') * -1 AS inner_product FROM items; SELECT 1 - (embedding <=> '[3,1,2]') AS cosine_similarity FROM items;