In diesem Dokument wird beschrieben, wie Sie mit der Erweiterung pgvector
Vektorähnlichkeitssuchen in AlloyDB for PostgreSQL durchführen. Mit der Suche nach Vektorähnlichkeit, auch als Suche nach dem nächsten Nachbarn bezeichnet, können Sie die Datenpunkte in Ihren Daten finden, die einem bestimmten Abfragevektor am ähnlichsten sind.
Nachdem Sie Einbettungen gespeichert und indexiert haben, können Sie Ihre AlloyDB-Datenbank nach semantisch ähnlichen Vektoren abfragen. Mit den pgvector
-Abfragefunktionen können Sie die nächsten Nachbarn für einen Einbettungsvektor finden.
Weitere Informationen zum Speichern von Vektoreinbettungen und zum Erstellen eines Index finden Sie unter Vektoreinbettungen speichern und Indizes erstellen.
Ähnlichkeitssuche mit Vektoreingabe ausführen
Geben Sie für eine Ähnlichkeitssuche die Tabelle, die Einbettungsspalte, die Distanzfunktion, die Zieleinbettung und die Anzahl der zurückzugebenden Zeilen an. Sie können die embedding()
-Funktion auch verwenden, um Text in einen Vektor zu übersetzen und den Vektor dann mit pgvector
-Operatoren mit gespeicherten Einbettungen zu vergleichen.
Wenn Sie die semantisch nächsten Nachbarn für einen Einbettungsvektor finden möchten, können Sie die folgende Beispielabfrage ausführen. Dabei legen Sie dieselbe Distanzfunktion fest, die Sie beim Erstellen des Index verwendet haben.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
Ersetzen Sie Folgendes:
TABLE
: Die Tabelle mit der Einbettung, mit der der Text verglichen werden soll.EMBEDDING_COLUMN
: die Spalte mit den gespeicherten Einbettungen.DISTANCE_FUNCTION_QUERY
: Die Distanzfunktion, die für diese Abfrage verwendet werden soll. Wählen Sie je nach der beim Erstellen des Index verwendeten Distanzfunktion eine der folgenden Optionen aus:L2-Distanz:
<->
Skalarprodukt:
<#>
Kosinus-Distanz:
<=>
EMBEDDING
: Der Einbettungsvektor, für den Sie die nächsten gespeicherten semantischen Nachbarn finden möchten.ROW_COUNT
: Die Anzahl der zurückzugebenden Zeilen.Geben Sie
1
an, wenn Sie nur das beste Ergebnis erhalten möchten.
Weitere Beispiele für Abfragen finden Sie unter Abfragen.
Ähnlichkeitssuche mit pgvector
und Texteingabe durchführen
Sie können auch die Funktion embedding()
verwenden, um den Text in einen Vektor zu übersetzen und die Datenbankzeilen mit den semantisch ähnlichsten Einbettungen zu finden. Die Standard-PostgreSQL-Erweiterung pgvector
wurde für AlloyDB angepasst und wird als vector
bezeichnet. Sie wenden den Vektor auf einen der pgvector
-Operatoren für die Suche nach dem nächsten Nachbarn an, z. B. <=>
für die Kosinusdistanz.
Da embedding()
ein real
-Array zurückgibt, müssen Sie den embedding()
-Aufruf explizit in vector
umwandeln, um diese Werte mit pgvector
-Operatoren zu verwenden.
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
Ersetzen Sie Folgendes:
MODEL_ID
: Die ID des Modells, das abgefragt werden soll.Wenn Sie den Vertex AI Model Garden verwenden, geben Sie
text-embedding-005
als Modell-ID an. Dies sind die cloudbasierten Modelle, die AlloyDB für Texteinbettungen verwenden kann. Weitere Informationen finden Sie unter Texteinbettungen.Optional:
VERSION_TAG
: das Versionstag des abzufragenden Modells. Stellen Sie dem Tag@
voran.Wenn Sie eines der englischen
text-embedding-005
-Modelle mit Vertex AI verwenden, geben Sie eines der Versionstags an, z. B.text-embedding-005
, das in Modellversionen aufgeführt ist.Google empfiehlt dringend, immer das Versionstag anzugeben. Wenn Sie das Versionstag nicht angeben, verwendet AlloyDB die neueste Modellversion, was zu unerwarteten Ergebnissen führen kann.
TEXT
: Der Text, der in eine Vektoreinbettung übersetzt werden soll.
Um die gefilterte KNN-Suche zu beschleunigen, können Sie die spaltenbasierte Engine von AlloyDB verwenden. Weitere Informationen finden Sie unter Gefilterte Vektorsuche beschleunigen (Vorschau) und Spaltenorientierte Engine konfigurieren.
Nächste Schritte
- Anleitung zur Vektorsuche
- Leistung von Vektorabfragen optimieren
- Messwerte für Vektorindexe
- Smart Shopping Assistant mit AlloyDB, pgvector und der Verwaltung von Modellendpunkten erstellen