Spanner Omni-Vektorsuche – Übersicht

Die Vektorsuche in Spanner Omni ist eine leistungsstarke, integrierte Funktion, die semantische Suche und Ähnlichkeitsabgleich für hochdimensionale Vektordaten ermöglicht. Durch das Speichern und Indexieren von Vektoreinbettungen direkt in Ihrer Transaktionsdatenbank macht Spanner Omni separate Vektordatenbanken und komplexe ETL-Pipelines (Extrahieren, Transformieren, Laden) überflüssig.

Die Themen in diesem Dokument gelten für Spanner Omni genauso wie für Spanner.

Mit der Vektorsuche können Sie semantisch ähnliche Elemente finden, indem Sie Daten als numerische Vektoren (Einbettungen) darstellen. Spanner Omni unterstützt zwei primäre Suchmethoden:

  • K-Nearest Neighbors (KNN): Führt eine genaue Suche durch, indem die Entfernung zwischen der Anfrage und jedem Vektor im Dataset berechnet wird. Sie bietet den höchsten Recall, kann aber bei großen Datasets rechenintensiv sein.

  • Annäherung an den nächsten Nachbarn (Approximate Nearest Neighbors, ANN): Verwendet einen Vektorindex, um schnell Übereinstimmungen in großen Datasets zu finden. Dabei wird ein geringer Verlust an Genauigkeit (Recall) in Kauf genommen, um die Geschwindigkeit und Skalierbarkeit zu verbessern.

Die Vektorsuche ist besonders leistungsstark, wenn sie mit anderen Funktionen kombiniert wird:

Kombination Vorteil
Vektorsuche mit SQL-Filterung Vektorsuche effizient mit Filtern kombinieren (z. B. „Ähnliche Bilder finden, bei denen category = ‚shoes‘ und price < 100“).
Vektorsuche + Volltextsuche Kombinieren Sie die semantische Ähnlichkeit mit der Stichwortgenauigkeit mithilfe von Reciprocal Rank Fusion (RRF), um die Suchrelevanz zu verbessern.
Vektor + Diagramm Mit der Vektorsuche können Sie relevante Einstiegspunkte (Knoten) in einem Property Graph finden und dann komplexe Beziehungen durchlaufen.

Weitere Informationen finden Sie in der Spanner-Dokumentation unter Übersicht über die Vektorsuche in Spanner.

Spanner Omni unterstützt die Suche nach K-Nearest Neighbors (KNN) mithilfe integrierter Distanzfunktionen. Sie können eine Vektoreinbettung als Eingabeparameter angeben, um die nächstgelegenen Vektoren im N-dimensionalen Raum zu finden.

Die folgenden Distanzfunktionen sind verfügbar:

  • COSINE_DISTANCE(): Misst den Kosinus des Winkels zwischen zwei Vektoren.

  • EUCLIDEAN_DISTANCE(): Misst die kürzeste Luftlinie zwischen zwei Vektoren.

  • DOT_PRODUCT(): Berechnet den Kosinus des Winkels multipliziert mit dem Produkt der Vektormagnituden (ideal für normalisierte Daten).

Weitere Informationen finden Sie unter Vektorähnlichkeitssuche durchführen, indem die K-nächsten Nachbarn gefunden werden in der Spanner-Dokumentation.

Die beste Funktion für die Vektordistanz auswählen

Die Auswahl der geeigneten Distanzfunktion hängt von Ihren Daten und dem Modell ab, mit dem die Einbettungen generiert werden.

Funktion Beschreibung Beziehung zur zunehmenden Ähnlichkeit
Skalarprodukt Berechnet den Kosinus des Winkels multipliziert mit dem Produkt der entsprechenden Vektormagnituden. Steigerungen
Kosinus-Distanz Entspricht dem Kosinus des Winkels zwischen zwei Vektoren (1 – Kosinus-Ähnlichkeit). Verringert sich
Euklidischer Abstand Misst die geradlinige Distanz zwischen zwei Vektoren. Verringert sich

Wenn Ihre Einbettungen normalisiert sind (Magnitude = 1,0), ist DOT_PRODUCT() in der Regel eine gute Wahl. Bei nicht normalisierten Daten sollten Sie mit COSINE_DISTANCE() oder EUCLIDEAN_DISTANCE() experimentieren, um herauszufinden, welche Methode für Ihren Anwendungsfall bessere Ergebnisse liefert.

Weitere Informationen finden Sie unter Vektordistanzfunktionen auswählen in der Spanner-Dokumentation.

Approximate Nearest Neighbors (ANN)

Die ANN-Suche ist für sehr große Datasets konzipiert, bei denen die exakte KNN-Suche zu langsam oder zu teuer wird. Dabei wird ein Vektorindex verwendet, um schnelle Ergebnisse zu liefern. Die Trefferquote wird dabei nur geringfügig beeinträchtigt.

Die ANN-Suche (Approximate Nearest Neighbor) in Spanner Omni unterstützt Datasets mit bis zu 1 Million Vektoren für Vektoren mit bis zu 128 Dimensionen. Wenn Ihre Vektoren mehr Dimensionen haben, verringert sich die unterstützte Anzahl von Vektoren entsprechend.

Für eine ANN-Suche verwenden Sie ungefähre Distanzfunktionen wie APPROX_COSINE_DISTANCE(), APPROX_EUCLIDEAN_DISTANCE() oder APPROX_DOT_PRODUCT(). Für diese Funktionen ist Folgendes erforderlich:

  • Ein vorhandener Vektorindex für die Einbettungsspalte.

  • Eine ORDER BY-Klausel mit der Näherungsdistanzfunktion.

  • Eine LIMIT-Klausel, um die Anzahl der Ergebnisse anzugeben.

Weitere Informationen finden Sie unter Ungefähre nächste Nachbarn (Approximate Nearest Neighbors, ANN) finden und Vektoreinbettungen abfragen in der Spanner-Dokumentation.

Vektorindexe erstellen und verwalten

Beim Erstellen eines Vektorindex müssen Sie den vector_length Ihrer Einbettungsspalte angeben und können mit der STORING-Klausel zusätzliche Spalten für ein schnelleres Filtern einfügen.

Im Folgenden finden Sie ein Beispiel für das Erstellen eines Vektorindex:

CREATE VECTOR INDEX INDEX_NAME
  ON TABLE_NAME(EMBEDDING_COLUMN)
  OPTIONS (distance_type = 'DISTANCE_TYPE', tree_depth = 2, num_leaves = 1000);

Weitere Informationen finden Sie in der Spanner-Dokumentation unter Vektorindizes erstellen und verwalten.

Best Practices für die Vektorindexierung

So sorgen Sie für eine hohe Suchleistung und ‑abruf:

  • Indexoptionen optimieren: Passen Sie num_leaves und num_leaves_to_search an Ihre Datengröße und Leistungsanforderungen an.

  • Regelmäßig neu erstellen: Erstellen Sie den Index neu, wenn sich die Verteilung Ihrer Vektoren im Laufe der Zeit erheblich ändert.

  • Filter effektiv einsetzen: Speichern Sie häufig gefilterte Spalten im Index, um die Sucheffizienz zu verbessern.

Weitere Informationen finden Sie in der Spanner-Dokumentation unter Best Practices für die Vektorindexierung.