pgvecto.rs
v0.4.0
pgvecto.rs 是一个 Postgres 扩展,提供向量相似性搜索功能。它是用 Rust 编写的,基于 pgrx。
查看 pgvecto.rs 与 pgvector 了解更多详细信息。
特征 | pgvecto.rs | PG向量 |
---|---|---|
过滤 | 引入VBASE方法进行向量搜索和关系查询(例如Single-Vector TopK + Filter + Join)。 | 应用过滤器时,结果可能不完整。例如,如果您最初打算将结果限制为 10 个,则最终可能只会得到 5 个带过滤器的结果。 |
矢量维度 | 最多支持 65535 个维度。 | 最多支持 2000 个维度。 |
单指令多数据流 | SIMD 指令在运行时动态调度,以根据特定机器的功能最大限度地提高性能。 | 在 0.7.0 中添加了 Linux x86-64" 上距离功能的 CPU 调度。 |
数据类型 | 引入其他数据类型:二进制向量、FP16(16 位浮点)和 INT8(8 位整数)。 | - |
索引 | 与 PostgreSQL 分开处理索引的存储和内存 | 依赖PostgreSQL原生存储引擎 |
沃尔支持 | 为数据提供预写日志记录 (WAL) 支持,索引支持正在进行中。 | 为索引和数据提供预写日志记录 (WAL) 支持。 |
对于新用户,我们建议使用Docker镜像来快速上手。
docker run
--name pgvecto-rs-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/pgvecto-rs:pg16-v0.2.1
然后您可以使用psql
命令行工具连接到数据库。默认用户名是postgres
,默认密码是mysecretpassword
。
psql -h localhost -p 5432 -U postgres
运行以下 SQL 以确保启用扩展。
DROP EXTENSION IF EXISTS vectors;
CREATE EXTENSION vectors;
pgvecto.rs 引入了一种新的数据类型vector(n)
表示 n 维向量。括号内的n
表示向量的维度。
您可以使用以下 SQL 创建一个表。
-- create table with a vector column
CREATE TABLE items (
id bigserial PRIMARY KEY ,
embedding vector( 3 ) NOT NULL -- 3 dimensions
);
提示
仅当vector(n)
是有效数据类型时vector(3)
类型的值vector
也是有效的数据类型。但是,您仍然不能将vector
,或者某些值与该列表示的维度不匹配,您将无法在其上创建索引。
然后,您可以使用矢量数据填充表,如下所示。
-- insert values
INSERT INTO items (embedding)
VALUES ( ' [1,2,3] ' ), ( ' [4,5,6] ' );
-- or insert values using a casting from array to vector
INSERT INTO items (embedding)
VALUES (ARRAY[ 1 , 2 , 3 ]:: real []), (ARRAY[ 4 , 5 , 6 ]:: real []);
我们支持三个运算符来计算两个向量之间的距离。
<->
:欧氏距离平方,定义为<#>
:负点积,定义为<=>
:余弦距离,定义为 -- call the distance function through operators
-- squared Euclidean distance
SELECT ' [1, 2, 3] ' ::vector < - > ' [3, 2, 1] ' ::vector;
-- negative dot product
SELECT ' [1, 2, 3] ' ::vector < # > '[3, 2, 1]'::vector;
-- cosine distance
SELECT ' [1, 2, 3] ' ::vector <=> ' [3, 2, 1] ' ::vector;
您可以像这样简单地搜索向量。
-- query the similar embeddings
SELECT * FROM items ORDER BY embedding < - > ' [3,2,1] ' LIMIT 5 ;
请查看问答应用教程。
除了标量类型之外, vecf16
类型与vector
相同。它存储 16 位浮点数。如果你想减少内存使用以获得更好的性能,可以尝试将vector
类型替换为vecf16
类型。
请查看路线图。想跳进去吗?欢迎讨论和投稿!
good first issue ?
问题! 我们欢迎来自开源社区、个人和合作伙伴的各种贡献。
感谢这些优秀的人(表情符号键):
添加您的贡献 |
该项目遵循所有贡献者规范。欢迎任何形式的贡献!
感谢以下项目: