pgvecto.rs adalah ekstensi Postgres yang menyediakan fungsi pencarian kesamaan vektor. Itu ditulis dalam Rust dan berdasarkan pgrx.
Lihat pgvecto.rs vs pgvector untuk lebih jelasnya.
Fitur | pgvecto.rs | vektor pg |
---|---|---|
Penyaringan | Memperkenalkan metode VBASE untuk pencarian vektor dan kueri relasional (misalnya TopK Vektor Tunggal + Filter + Gabung). | Saat filter diterapkan, hasilnya mungkin tidak lengkap. Misalnya, jika awalnya Anda ingin membatasi hasil menjadi 10, Anda mungkin hanya mendapatkan 5 hasil dengan filter. |
Dimensi Vektor | Mendukung hingga 65535 dimensi. | Mendukung hingga 2000 dimensi. |
SIMD | Instruksi SIMD dikirimkan secara dinamis pada saat runtime untuk memaksimalkan kinerja berdasarkan kemampuan mesin tertentu. | Menambahkan pengiriman CPU untuk fungsi jarak di Linux x86-64" di 0.7.0. |
Tipe Data | Memperkenalkan tipe data tambahan: vektor biner, FP16 (floating point 16-bit), dan INT8 (integer 8-bit). | - |
Pengindeksan | Menangani penyimpanan dan memori indeks secara terpisah dari PostgreSQL | Mengandalkan mesin penyimpanan asli PostgreSQL |
Dukungan WAL | Memberikan dukungan Write-Ahead Logging (WAL) untuk data, dukungan indeks sedang dalam proses. | Memberikan dukungan Write-Ahead Logging (WAL) untuk indeks dan data. |
Untuk pengguna baru, kami menyarankan penggunaan image Docker untuk memulai dengan cepat.
docker run
--name pgvecto-rs-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/pgvecto-rs:pg16-v0.2.1
Kemudian Anda dapat terhubung ke database menggunakan alat baris perintah psql
. Nama pengguna default adalah postgres
, dan kata sandi default adalah mysecretpassword
.
psql -h localhost -p 5432 -U postgres
Jalankan SQL berikut untuk memastikan ekstensi diaktifkan.
DROP EXTENSION IF EXISTS vectors;
CREATE EXTENSION vectors;
pgvecto.rs memperkenalkan tipe data baru vector(n)
yang menunjukkan vektor berdimensi n. Tanda n
di dalam tanda kurung menandakan dimensi vektor.
Anda bisa membuat tabel dengan SQL berikut.
-- create table with a vector column
CREATE TABLE items (
id bigserial PRIMARY KEY ,
embedding vector( 3 ) NOT NULL -- 3 dimensions
);
Tip
vector(n)
adalah tipe data yang valid hanya jika vector(3)
dari vector
juga merupakan tipe data yang valid. Namun, Anda tetap tidak bisa memasangnya vector
untuk kolom atau ada beberapa nilai yang tidak cocok dengan dimensi yang ditunjukkan oleh kolom, Anda tidak akan dapat membuat indeks di dalamnya.
Anda kemudian dapat mengisi tabel dengan data vektor sebagai berikut.
-- 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 []);
Kami mendukung tiga operator untuk menghitung jarak antara dua vektor.
<->
: kuadrat jarak Euclidean, didefinisikan sebagai <#>
: perkalian titik negatif, didefinisikan sebagai <=>
: jarak kosinus, didefinisikan sebagai -- 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;
Anda dapat mencari vektor seperti ini.
-- query the similar embeddings
SELECT * FROM items ORDER BY embedding < - > ' [3,2,1] ' LIMIT 5 ;
Silakan simak tutorial aplikasi Tanya-Jawab.
Tipe vecf16
sama dengan vector
dalam hal apa pun kecuali tipe skalar. Ini menyimpan angka floating point 16-bit. Jika Anda ingin mengurangi penggunaan memori untuk mendapatkan performa yang lebih baik, Anda dapat mencoba mengganti tipe vector
dengan tipe vecf16
.
Silakan periksa PETA JALAN. Ingin ikut serta? Selamat datang diskusi dan kontribusi!
good first issue ?
masalah! Kami menyambut segala jenis kontribusi dari komunitas sumber terbuka, individu, dan mitra.
Terima kasih kepada orang-orang hebat ini (kunci emoji):
Tambahkan kontribusi Anda |
Proyek ini mengikuti spesifikasi semua kontributor. Kontribusi apa pun diterima!
Berkat proyek-proyek berikut: