更新时间:2024-09-06 GMT+08:00
分享

使用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;
  • 聚合函数
    SELECT AVG(embedding) FROM items;
  • 精确搜索是有完美召回率的

    可以添加索引使用近似最近邻搜索,牺牲一些召回率来换取性能

    CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 1);
    INSERT INTO items (embedding) VALUES ('[1,2,4]');
    SELECT * FROM items ORDER BY embedding <-> '[3,3,3]';

相关文档