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 ?
問題! 我們歡迎來自開源社群、個人和合作夥伴的各種貢獻。
感謝這些優秀的人(表情符號鍵):
添加您的貢獻 |
該項目遵循所有貢獻者規範。歡迎任何形式的貢獻!
感謝以下項目: