Suche nach Vektorähnlichkeiten ausführen

In diesem Dokument wird erläutert, wie Sie mit der Erweiterung pgvector Vektorähnlichkeitssuchen in AlloyDB for PostgreSQL ausführen. Mit der Vektorähnlichkeitssuche, 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 pgvector-Abfragefunktionen können Sie die nächsten Nachbarn für einen Einbettungsvektor ermitteln.

Weitere Informationen zum Speichern von Vektoreinbettungen und zum Erstellen eines Index finden Sie unter Vektoreinbettungen speichern und Indizes erstellen.

Geben Sie zum Ausführen einer Ähnlichkeitssuche die Tabelle, die Einbettungsspalte, die Distanzfunktion, die Ziel-Einbettung und die Anzahl der zurückzugebenden Zeilen an. Sie können auch die Funktion embedding() verwenden, um Text in einen Vektor zu übersetzen und den Vektor dann mithilfe von pgvector-Operatoren mit gespeicherten Einbettungen zu vergleichen.

Wenn Sie die nächsten semantischen Nachbarn für einen Einbettungsvektor ermitteln möchten, können Sie die folgende Beispielabfrage ausführen. Dabei verwenden Sie dieselbe Distanzfunktion, die Sie bei der Indexerstellung 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 Entfernungsfunktion, die für diese Abfrage verwendet werden soll. Wählen Sie je nach der beim Erstellen des Index verwendeten Entfernungsfunktion 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 nur die beste Übereinstimmung zurückgegeben werden soll.

Weitere Abfragebeispiele finden Sie unter Abfragen.

Sie können auch die Funktion embedding() verwenden, um den Text in einen Vektor umzuwandeln. Die Standard-PostgreSQL-Erweiterung pgvector wird für AlloyDB angepasst und als vector bezeichnet. Sie wenden den Vektor auf einen der pgvector-Operatoren für den nächsten Nachbarn an, z. B. <-> für die L2-Distanz, um die Datenbankzeilen mit den semantisch ähnlichsten Einbettungen zu finden.

Da embedding() ein real-Array zurückgibt, müssen Sie den embedding()-Aufruf explizit in vector umwandeln, um diese Werte mit pgvector-Operatoren verwenden zu können.

  CREATE EXTENSION IF NOT EXISTS google_ml_integration VERSION '1.2';
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Ersetzen Sie Folgendes:

  • MODEL_ID: Die ID des Modells, das abgefragt werden soll.

    Wenn Sie 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 Versions-Tag des Modells, das abgefragt werden soll. Stellen Sie dem Tag @ voran.

    Wenn Sie eines der text-embedding-005-Englischmodelle mit Vertex AI verwenden, geben Sie eines der Versions-Tags an, z. B. text-embedding-005, das unter Modellversionen aufgeführt ist.

    Google empfiehlt dringend, immer das Versions-Tag anzugeben. Wenn Sie das Versions-Tag nicht angeben, verwendet AlloyDB die neueste Modellversion. Dies kann zu unerwarteten Ergebnissen führen.

  • TEXT: Der Text, der in eine Vektoreinbettung umgewandelt werden soll.

Nächste Schritte