Suche nach Vektorähnlichkeiten ausführen

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.

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.

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