pgvecto.rs ist eine Postgres-Erweiterung, die Suchfunktionen für Vektorähnlichkeiten bereitstellt. Es ist in Rust geschrieben und basiert auf pgrx.
Weitere Informationen finden Sie unter pgvecto.rs vs. pgvector.
Besonderheit | pgvecto.rs | pgvector |
---|---|---|
Filtern | Stellt die VBASE-Methode für die Vektorsuche und relationale Abfrage vor (z. B. Single-Vector TopK + Filter + Join). | Wenn Filter angewendet werden, können die Ergebnisse unvollständig sein. Wenn Sie beispielsweise ursprünglich vorhatten, die Ergebnisse auf 10 zu beschränken, könnten Sie mit Filtern am Ende nur 5 Ergebnisse erhalten. |
Vektorabmessungen | Unterstützt bis zu 65535 Dimensionen. | Unterstützt bis zu 2000 Dimensionen. |
SIMD | SIMD-Anweisungen werden zur Laufzeit dynamisch gesendet, um die Leistung basierend auf den Fähigkeiten der jeweiligen Maschine zu maximieren. | CPU-Dispatching für Distanzfunktionen unter Linux x86-64" in 0.7.0 hinzugefügt. |
Datentypen | Führt zusätzliche Datentypen ein: Binärvektoren, FP16 (16-Bit-Gleitkomma) und INT8 (8-Bit-Ganzzahl). | - |
Indizierung | Verwaltet die Speicherung und den Arbeitsspeicher von Indizes getrennt von PostgreSQL | Stützt sich auf die native Speicher-Engine von PostgreSQL |
WAL-Unterstützung | Bietet WAL-Unterstützung (Write-Ahead Logging) für Daten, die Indexunterstützung ist in Arbeit. | Bietet WAL-Unterstützung (Write-Ahead Logging) für Index und Daten. |
Für neue Benutzer empfehlen wir die Verwendung des Docker-Images, um schnell loslegen zu können.
docker run
--name pgvecto-rs-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/pgvecto-rs:pg16-v0.2.1
Anschließend können Sie mit dem psql
Befehlszeilentool eine Verbindung zur Datenbank herstellen. Der Standardbenutzername ist postgres
und das Standardkennwort ist mysecretpassword
.
psql -h localhost -p 5432 -U postgres
Führen Sie die folgende SQL aus, um sicherzustellen, dass die Erweiterung aktiviert ist.
DROP EXTENSION IF EXISTS vectors;
CREATE EXTENSION vectors;
pgvecto.rs führt einen neuen Datentyp vector(n)
ein, der einen n-dimensionalen Vektor bezeichnet. Das n
in den Klammern gibt die Dimensionen des Vektors an.
Sie könnten eine Tabelle mit dem folgenden SQL erstellen.
-- create table with a vector column
CREATE TABLE items (
id bigserial PRIMARY KEY ,
embedding vector( 3 ) NOT NULL -- 3 dimensions
);
Tipp
vector(n)
ist nur dann ein gültiger Datentyp, wenn vector(3)
zu erstellen vector
sind ebenfalls gültige Datentypen. Sie können es jedoch immer noch nicht setzen vector
verwenden oder einige Werte nicht mit der durch die Spalte angegebenen Dimension übereinstimmen, können Sie keinen Index dafür erstellen.
Anschließend können Sie die Tabelle wie folgt mit Vektordaten füllen.
-- 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 []);
Wir unterstützen drei Operatoren zur Berechnung des Abstands zwischen zwei Vektoren.
<->
: quadrierter euklidischer Abstand, definiert als <#>
: negatives Skalarprodukt, definiert als <=>
: Kosinusabstand, definiert als -- 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;
Sie können einfach so nach einem Vektor suchen.
-- query the similar embeddings
SELECT * FROM items ORDER BY embedding < - > ' [3,2,1] ' LIMIT 5 ;
Bitte schauen Sie sich das Tutorial zur Frage-Antwort-Anwendung an.
Der Typ vecf16
ist in allen Bereichen außer dem Skalartyp mit vector
identisch. Es speichert 16-Bit-Gleitkommazahlen. Wenn Sie die Speichernutzung reduzieren möchten, um eine bessere Leistung zu erzielen, können Sie versuchen, vector
durch den Typ vecf16
zu ersetzen.
Bitte schauen Sie sich die ROADMAP an. Willst du einsteigen? Willkommene Diskussionen und Beiträge!
good first issue ?
Probleme! Wir freuen uns über alle Arten von Beiträgen aus der Open-Source-Community, Einzelpersonen und Partnern.
Der Dank geht an diese wunderbaren Menschen (Emoji-Taste):
Fügen Sie Ihre Beiträge hinzu |
Dieses Projekt folgt der All-Contributors-Spezifikation. Beiträge jeglicher Art willkommen!
Dank an folgende Projekte: