- 作者:老汪软件技巧
- 发表时间:2024-08-18 04:02
- 浏览量:
简介
pgvector:在 Postgres 中存储和查询向量。您可以将向量数据与其他数据一起存储在 Postgres 中,并进行向量相似性搜索,同时仍然可以利用 Postgres 提供的所有强大功能。
pgvector 扩展与 Postgres 无缝集成 - 允许用户在现有数据库基础设施中利用其功能。通过将向量化处理的能力整合到PostgreSQL中,pgvector允许用户直接在数据库中进行大规模的相似性搜索、机器学习模型预测等多种操作,因为不需要单独的数据存储或复杂的数据传输过程。
核心功能
1.向量存储
2.相似性搜索
3.集成SQL支持:
4.扩展性与灵活性:
pgvector适用于多种应用场景,包括但不限于:
准备工作
登录MemFire Cloud平台,创建一个新应用,如下图所示:
应用创建成功后,即可获得一个云端的Postgres数据库。
启用扩展
1.通过控制台页面开启vector扩展。
(1)转到仪表板中的数据库页面。
(2)点击侧边栏中的 扩展。
(3)搜索 "vector" 并启用该扩展。
另外,也可以通过在SQL编辑器页面,执行如下SQL语句来启用/禁用扩展。
-- Example: enable the "vector" extension.
create extension vector
with
schema extensions;
-- Example: disable the "vector" extension
drop
extension if exists vector;
使用教程
以下是一个简单的示例,展示如何使用 pgvector。
创建向量表
你可以在创建新表时定义向量列:
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
vector_col vector(3)
);
插入向量数据
为了进行测试,我们插入一些数据:
-- 直接插入向量
INSERT INTO documents (content, vector_col) VALUES ('example content1', '[0.1, 0.2, 0.3]');
INSERT INTO documents (content, vector_col) VALUES ('example content2', '[0.3, 0.2, 0.3]');
INSERT INTO documents (content, vector_col) VALUES ('example content3', '[0.1, 0.3, 0.2]');
INSERT INTO documents (content, vector_col) VALUES ('example content4', '[0.2, 0.2, 0.3]');
INSERT INTO documents (content, vector_col) VALUES ('example content5', '[0.1, 0.1, 0.2]');
执行结果如下:
查询数据
pgvector 支持的一些距离函数:
例如:获取与向量'[0.3, 0.2, 0.3]'直线距离
SELECT vector_col <-> '[0.3, 0.2, 0.3]' AS distance FROM documents
执行结果如下:
例如:获取与向量'[0.3, 0.2, 0.3]'的余弦相似度:
SELECT vector_col <=> '[0.3, 0.2, 0.3]' FROM documents;
执行结果如下:
对于内积,乘以 -1(因为 返回负内积)。
SELECT (vector_col <#> '[0.3, 0.2, 0.3]') * -1 AS inner_product FROM documents;
执行结果如下:
创建索引
默认情况下,pgvector 执行精确最近邻搜索,提供完美召回率。你可以添加索引以使用近似最近邻搜索,这会在速度和召回率之间进行权衡。与典型索引不同,添加近似索引后,查询结果会有所不同。
pgvector 支持的索引类型有:
配置索引参数(可选)
HNSW 索引允许你设置一些参数来优化索引的行为,例如 ef_construct 和 M:
CREATE INDEX documents_idx
ON documents
USING hnsw (vector_col)
WITH (M=16, ef_construct=200);
使用索引进行查询
创建索引后,你可以使用它来加速向量搜索。例如,使用欧几里得距离进行搜索:
SELECT * FROM documents
ORDER BY vector_col <-> '[0.1, 0.2, 0.3]'::vector
LIMIT 10;
注意事项总结
总之,pgvector是PostgreSQL数据库系统的一个强大扩展,它为用户提供了高效的向量存储和查询能力,适用于处理大规模、高维度的向量数据。无论是机器学习、自然语言处理还是其他需要高效相似性搜索的领域,pgvector都能提供有力的支持。