Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden von Vektorindizes in DynamoDB
Vektorindizes sind eine Art von Index in Amazon DynamoDB, der die Ähnlichkeitssuche nach Vektoreinbettungen ermöglicht, die in Ihren Tabellenelementen gespeichert sind. Im Gegensatz zu globalen sekundären Indizes und lokalen sekundären Indizes, die exakte Treffer- und Bereichsabfragen mithilfe Query von Scan UND-Operationen unterstützen, verwenden Vektorindizes die Suche nach Näherem nächsten Nachbarn (ANN), um Elemente zu finden, deren Vektoren einem von Ihnen angegebenen Abfragevektor am ähnlichsten sind. Sie führen diese Ähnlichkeitssuchen durch, indem Sie die SearchVectors API aufrufen, die nach einem Ähnlichkeitswert geordnet die ähnlichsten Elemente zurückgibt.
Mit Vektorindizes können Sie Vektoreinbettungen zusammen mit Ihren Betriebsdaten in DynamoDB speichern und Ähnlichkeitssuchen durchführen, ohne eine separate Vektordatenbank zu benötigen. Dadurch entfallen komplexe Datenreplikations-Pipelines zwischen DynamoDB und externen Vektorspeichern.
Vektorindizes werden über dieselben CreateTable UpdateTable APIs verwaltet, die Sie bereits verwenden, mit dem VectorIndexes Parameter (forCreateTable) und dem VectorIndexUpdates Parameter (for). UpdateTable
Themen
Anwendungsfälle für Vektorindizes
Vektorindizes unterstützen eine Vielzahl von Anwendungsfällen, bei denen ähnliche Elemente auf der Grundlage von Vektordarstellungen gefunden werden müssen:
-
Semantische Suche — Entwickeln Sie Suchmaschinen, die eher die Bedeutung von Suchanfragen verstehen als passende Schlüsselwörter. Speichern Sie Texteinbettungen, die von Modellen für maschinelles Lernen generiert wurden, und finden Sie semantisch ähnliche Inhalte.
-
Retrieval Augmented Generation (RAG) — Verbinden Sie große Sprachmodelle (LLMs) mit relevanten Wissensdatenbanken. Speichern Sie Dokumenteinbettungen in DynamoDB und rufen Sie den relevantesten Kontext für LLM-Eingabeaufforderungen ab.
-
Empfehlungssysteme — Finden Sie ähnliche Produkte, Inhalte oder Benutzer anhand von Vektordarstellungen ihrer Funktionen oder ihres Verhaltens.
-
Speicher für KI-Agenten — Speichern Sie Einbettungen von Konversationen, um den Kontext zwischen den Sitzungen aufrechtzuerhalten und die Leistung der KI-Agenten zu verbessern.
-
Erkennung von Anomalien und Betrug — Vergleichen Sie neue Ereignisse mit Einbettungen von bekanntermaßen normalem Verhalten, um Ausreißer wie ungewöhnliche Transaktionen oder betrügerische Aktivitäten zu erkennen.
Vergleich von Vektorindizes mit Sekundärindizes
In der folgenden Tabelle werden Vektorindizes mit globalen Sekundärindizes und lokalen Sekundärindizes verglichen.
| Feature | Vektorindex | Globaler sekundärer Index | Lokaler sekundärer Index |
|---|---|---|---|
| Abfragetyp | Ähnlichkeitssuche | Exakte Übereinstimmung und Reichweite | Exakte Übereinstimmung und Reichweite |
| API lesen | SearchVectors |
Query, Scan |
Query, Scan |
| Schema | Vektorattribut plus optional SearchSchema (Partitionsschlüssel, Inline-Filter) | Partitionsschlüssel und optionale Sortierschlüssel | Derselbe Partitionsschlüssel, anderer Sortierschlüssel |
| Maximum pro Tabelle | 5 | 20 | 5 |
| Kapazitätsmodus | On-demand nur | On-demand oder bereitgestellt | On-demand oder bereitgestellt |
Distanzfunktionen
Wenn Sie einen Vektorindex erstellen, wählen Sie eine Distanzfunktion. Die Distanzfunktion bestimmt, wie DynamoDB die Ähnlichkeit zwischen Vektoren misst. Ihre Auswahl wirkt sich auf die Ranking-Qualität und die Suchgenauigkeit aus. Amazon DynamoDB unterstützt drei Distanzfunktionen.
| Entfernungsfunktion | Interpretation der Ergebnisse | Das beste Spiel |
|---|---|---|
COSINE |
Niedrigere Werte deuten auf eine größere Ähnlichkeit hin. Misst den Kosinusabstand (1 minus Kosinusähnlichkeit) zwischen zwei Vektoren. Die Werte reichen von 0 (identische Richtung) bis 2 (entgegengesetzte Richtung). | Kleinste Punktzahlen |
DOT_PRODUCT |
Höhere Werte deuten auf eine größere Ähnlichkeit hin. Misst das Punktprodukt zwischen zwei Vektoren. | Die höchsten Punktzahlen |
EUCLIDEAN |
Niedrigere Werte deuten auf eine größere Ähnlichkeit hin. Misst den geradlinigen Abstand zwischen zwei Vektoren. | Kleinste Werte |
Informationen zum Vergleich der Rangfolge von Entfernungsfunktionen für denselben Abfragevektor finden Sie unterWie ordnen Entfernungsfunktionen Ergebnisse.
Die folgende Anleitung hilft Ihnen bei der Auswahl der richtigen Entfernungsfunktion für Ihre Arbeitslast.
COSINE-
Vergleicht die Richtung und ignoriert die Größe. Wird
COSINEfür semantische Ähnlichkeit mit Modellen zur Texteinbettung verwendet. Diese Modelle kodieren die Bedeutung in ihrer Richtung, und die Vektorlänge kann variieren. Beispiele hierfür sind Amazon Titan Text Embeddings und. Cohere EmbedCOSINEeignet sich gut für die folgenden Anwendungsfälle:-
Semantische Suche in Produktbeschreibungen oder Dokumenten
-
Retrieval Augmented Generation (RAG)
-
FAQ-Matching
COSINEist die sichere Standardeinstellung, wenn Sie sich nicht sicher sind, welche Funktion Sie verwenden sollen. -
DOT_PRODUCT-
DOT_PRODUCTreagiert sowohl auf die Richtung als auch auf die Größe (die Länge eines Vektors). Wählen Sie ausDOT_PRODUCT, wann in der Dokumentation Ihres Einbettungsmodells das Punktprodukt als Ähnlichkeitsmaß empfohlen wird oder wann die Vektorlänge die Rangfolge beeinflussen soll.DOT_PRODUCTeignet sich gut für die folgenden Anwendungsfälle:-
Empfehlungssysteme, die Beliebtheits- oder Vertrauenswerte verwenden, um Einbettungen zu skalieren und das Ranking zu beeinflussen
-
Modelle, in deren Dokumentation ausdrücklich das Punktprodukt als Ähnlichkeitsmaß empfohlen wird
-
Magnitude-sensitive Rangfolge, bei der die Vektorlänge ein aussagekräftiges Signal liefert
Wir empfehlen, Ihre Einbettungen auf Längeneinheiten zu normalisieren. Bei der Normalisierung ergeben sich die
DOT_PRODUCTRangfolgen auf die gleiche Weise wie.COSINEÜberspringen Sie die Normalisierung nur, wenn Sie möchten, dass sich die Größe auf das Ranking auswirkt.Anwendungsbeispiel: Ein Produktempfehlungssystem, bei dem Sie jede Produkteinbettung anhand ihres Beliebtheitswerts skalieren. Beliebtere Produkte erhalten längere Vektoren und rangieren in den Suchergebnissen höher.
-
EUCLIDEAN-
Misst den geradlinigen Abstand zwischen zwei Vektoren.
EUCLIDEANreagiert empfindlich auf die Größe. Verwenden Sie es, wenn es auf die absolute Position im Einbettungsbereich ankommt.EUCLIDEANeignet sich gut für die folgenden Anwendungsfälle:-
Bild- oder Audioeinbettungen, bei denen es auf räumliche Entfernung ankommt
-
Near-duplicate Erkennung
-
Clustering und Erkennung von Anomalien
Beispiel für einen Anwendungsfall: Auffinden nahezu doppelter Bilder anhand von Bildeinbettungen.
-
Wählen Sie eine Distanzfunktion, die zu Ihrem Einbettungsmodell passt
Wenn Sie sich nicht sicher sind, welche Funktion Sie verwenden sollen, lesen Sie in der Dokumentation Ihres Einbettungsmodells nach. Bestätigen Sie Ihre Wahl anhand eines repräsentativen Datensatzes. Sie können die Entfernungsfunktion nach der Indexerstellung nicht ändern. Weitere Informationen finden Sie unter Passen Sie die Distanzfunktion an Ihre Einbettungen an.
Wie ordnen Entfernungsfunktionen Ergebnisse
Die Entfernungsfunktion, die Sie beim Erstellen des Indexes auswählen, bestimmt sowohl den Score Wert als auch die Sortierreihenfolge der Ergebnisse. Dieselbe Abfrage kann dieselben Elemente unter verschiedenen Distanzfunktionen unterschiedlich einordnen. Im folgenden Beispiel wird der Abfrage-Vektor [1, 0, 0, 0] gegen vier gespeicherte Vektoren verwendet.
| Gespeicherter Vektor | COSINE(niedriger ist ähnlicher) |
EUCLIDEAN(niedriger ist ähnlicher) |
DOT_PRODUCT(höher ist ähnlicher) |
|---|---|---|---|
[1, 0, 0, 0] |
0.0 | 0.0 | 1,0 |
[10, 0, 0, 0] |
0.0 | 9.0 | 10.0 |
[0.7071, 0.7071, 0, 0] |
0,29 | 0,77 | 0,71 |
[-1, 0, 0, 0] |
2.0 | 2.0 | -1,0 |
Zwei Verhaltensweisen sind bemerkenswert:
-
COSINEignoriert die Größe. Es bewertet[1, 0, 0, 0]und[10, 0, 0, 0]identisch (beide0.0), weil sie in dieselbe Richtung zeigen.EUCLIDEANrangiert bei derselben Abfrage an[10, 0, 0, 0]letzter Stelle, da sie die absolute Entfernung misst, die mit der Größe eines Vektors zunimmt. -
DOT_PRODUCTDie Ergebnisse können negativ sein. Ein Vektor, der in die entgegengesetzte Richtung ([-1, 0, 0, 0]) zeigt, wird bewertet-1.0. Gehen Sie nicht davon aus, dass die Ergebnisse immer nicht negativ sind, wenn Sie Ergebnisse sortieren oder Schwellenwerte auf Ergebnisse anwenden.
SearchSchema
Wenn Sie einen Vektorindex erstellen, können Sie optional einen definieren SearchSchema , der Vektorindex-Partitionsschlüssel und Inline-Filterattribute angibt.
HASH(Partitionsschlüssel für den Vektorindex)-
Ein Vektorindex-Partitionsschlüssel beschränkt jede Suche auf die Vektoren, die denselben Wert für ein von Ihnen ausgewähltes Attribut haben. Elemente mit demselben Partitionsschlüsselwert werden zusammen gespeichert, sodass bei der Suche nur diese Teilmenge gelesen wird, anstatt den gesamten Index zu durchsuchen. Bei hoher Skalierung senkt ein Vektorindex-Partitionsschlüssel die Suchlatenz, da bei der Suche nur eine Teilmenge des Vektorraums untersucht wird. Verwenden Sie Attribute mit niedriger bis mittlerer Kardinalität, wie z. B. oder.
CategoryCountrySie können höchstens einen Vektorindex-Partitionsschlüssel angeben.Wenn Sie einen Vektorindex-Partitionsschlüssel in der definieren SearchSchema, müssen Sie seinen Wert in der angeben
SearchConditionExpression, wenn Sie aufrufenSearchVectors.Verwenden Sie einen Partitionsschlüssel, um den Suchdurchsatz zu skalieren
Definieren Sie einen Vektorindex-Partitionsschlüssel, wenn Sie einen großen Index oder ein hohes Suchvolumen erwarten. Da jeder
SearchVectorsAufruf auf einen einzelnen Partitionsschlüsselwert beschränkt ist, können Sie durch die Verteilung Ihrer Daten auf viele Partitionsschlüsselwerte mehr Suchvorgänge pro Sekunde ausführen und die Datenmenge reduzieren, die bei jeder Suche untersucht wird. Siehe Wählen Sie einen Partitionsschlüssel, der Ihren Abfragemustern entspricht. INLINE_FILTER-
Ein Inline-Filterattribut ist ein reguläres Nicht-Vektorattribut, dessen Wert DynamoDB im Vektorindex neben jedem Vektor speichert. Da der Wert dem Vektor zugeordnet ist, überspringt DynamoDB Vektoren, die Ihrem Filter nicht entsprechen, während es den Index durchsucht. Dadurch wird vermieden, dass zuerst der gesamte Index durchsucht und dann Ergebnisse verworfen werden, die nicht übereinstimmen.
Wenn Sie beispielsweise ein
LanguageAttribut als Inline-Filter definieren, werden bei einer Suche, die danach filtert, nur die VektorenLanguageberücksichtigt, derenLanguageWert übereinstimmt.Inline-Filter unterstützen den Gleichheitsoperator (
=) inSearchConditionExpression. Vergleichs-, Range- und Set-Mitgliedschaftsoperatoren (<><,,<=,>,>=,IN) sind noch nicht verfügbar. Im Gegensatz zu Partitionsschlüsseln für Vektorindizes sind Inline-Filter bei der Suche optional.
Sie können einen Vektorindex erstellen, ohne einen Partitionsschlüssel in der zu definieren SearchSchema. In diesem Fall durchsucht jeder SearchVectors Aufruf den gesamten Index. Das ist einfacher, weil Sie keine benötigenSearchConditionExpression. Da jedoch bei jeder Suche der gesamte Index untersucht wird, nimmt die Arbeit jeder Suche — und damit auch deren Latenz und Kosten — mit dem Wachstum Ihres Indexes zu. Sie können den Suchdurchsatz auch nicht auf mehrere Partitionsschlüsselwerte verteilen. Wenn Ihre Arbeitslast einen hohen Durchsatz erfordert oder Ihr Index eine große Anzahl von Vektoren enthält, definieren Sie einen Partitionsschlüssel, um Daten auf Partitionen zu verteilen und unabhängig zu skalieren. Siehe Wählen Sie einen Partitionsschlüssel, der Ihren Abfragemustern entspricht.
Projektionen
Wie globale sekundäre Indizes unterstützen Vektorindizes Prognosen, die steuern, welche Attribute aus der Basistabelle in den Index kopiert werden. Sie geben die Projektion an, wenn Sie den Vektorindex erstellen.
-
KEYS_ONLY— Nur die Primärschlüsselattribute der Basistabelle, das Vektorattribut und alle darin definierten Inline-Filterattribute SearchSchema werden in den Index projiziert. -
INCLUDE— Zusätzlich zu denKEYS_ONLYAttributen geben Sie weitere Attribute an, die keine Schlüsselattribute für das Projekt sind. Sie können den Satz der enthaltenen Attribute nicht mehr ändern, nachdem der Vektorindex erstellt wurde. Um einen anderen Satz von Attributen zu projizieren, löschen Sie den Index und erstellen Sie ihn mit der gewünschten Projektion neu. -
ALL— Alle Attribute aus der Basistabelle werden in den Index projiziert.
Die Projektion begrenzt, was zurückgegeben SearchVectors werden kann
Attribute, die nicht in den Vektorindex projiziert werden, können in SearchVectors Antworten nicht zurückgegeben werden. Wenn Sie bestimmte Attribute in den Suchergebnissen benötigen, nehmen Sie diese in die Projektion auf oder verwenden Sie sieALL.
Verwenden von Vektorindizes mit anderen DynamoDB-Funktionen
- DynamoDB Streams
-
Sie können DynamoDB-Streams für eine Tabelle mit einem Vektorindex aktivieren, entweder mit dem
StreamSpecificationParameter beim Erstellen der Tabelle oder über.UpdateTableDer Stream erfasst Änderungen an der Basistabelle auf Elementebene und arbeitet unabhängig vom Vektorindex. - Globale Tabellen
-
Sie können einer globalen Tabelle einen Vektorindex hinzufügen, und Sie können eine Tabelle mit einem Vektorindex in eine globale Tabelle konvertieren, indem Sie ein Replikat mit hinzufügen.
UpdateTableDie Vektorindexdefinition, einschließlich ihrer Dimensionen, Entfernungsfunktion und Projektion SearchSchema, wird automatisch in jede neue Replikatregion repliziert. Sie erstellen den Vektorindex nicht separat in der Replikatregion.Elemente, die Sie in eine beliebige Replikatregion schreiben, werden in die anderen Regionen repliziert und dort indexiert. Nach Abschluss der Replikation wird
SearchVectorsin jeder Region nach demselben Satz von Vektoren gesucht. Da bei der Vektorsuche der ungefähre nächste Nachbar (ANN) verwendet wird, können separate Suchen in verschiedenen Regionen zu leicht unterschiedlichen Ergebnissen oder einer anderen Reihenfolge für dieselbe Abfrage führen, selbst wenn es sich um identische Daten handelt. Die Tabellenreplikation zwischen Regionen folgt der Konsistenzgarantie der globalen Tabelle, einschließlich starker Konsistenz für globale MRSC-Tabellen (Multiregion Strong Consistency). Die Vektorindizierung erfolgt jedoch immer asynchron, nachdem ein Schreibvorgang auf die Tabelle angewendet wurde, und zwar in jeder Region — auch in der Region, in die Sie geschrieben haben. Die MRSC-Garantie deckt die Tabelle ab, nicht den Vektorindex. Infolgedessen kommt es zu einer Verzögerung zwischen dem Zeitpunkt, zu dem ein Schreibvorgang bestätigt wird, und dem Zeitpunkt, zu dem der Vektor durchsuchbar ist.SearchVectorsDiese Verzögerung gilt sowohl lokal als auch regionsübergreifend.On-demand Kapazität erforderlich
Vektorindizes verwenden nur den On-Demand-Kapazitätsmodus, und sie benötigen eine Tabelle, die auch den On-Demand-Kapazitätsmodus verwendet. Sie können die beiden Kapazitätsmodi nicht mischen. Globale Tabellen unterstützen den On-Demand-Kapazitätsmodus. Erstellen Sie den Vektorindex und das Replikat in einer Tabelle, die bereits On-Demand-Kapazität nutzt.
- Point-in-time Wiederherstellung (PITR) und Backups
-
Wenn Sie eine Tabelle aus einer Point-in-Time-Wiederherstellung oder einer On-Demand-Backup wiederherstellen, stellt DynamoDB die Basistabellendaten und die Vektorindexdefinition wieder her. Wie bei globalen sekundären Indizes erstellt DynamoDB den Vektorindex aus den wiederhergestellten Basistabellendaten neu, anstatt ihn Byte für Byte zu kopieren. Daher durchläuft der Index ein Backfilling, bevor er für die Suche bereit ist. Warten Sie, bis der wiederhergestellte Index auf dem
IndexStatuswiederhergestelltenACTIVEIndexBackfillingsteht und nichttrue, bevor Sie ihn ausführen.SearchVectors - Time to Live (TTL)
-
Sie können DynamoDB TTL für eine Tabelle verwenden, die einen Vektorindex hat. Wenn TTL ein abgelaufenes Element aus der Basistabelle löscht, entfernt DynamoDB den entsprechenden Eintrag aus dem Vektorindex, genauso wie bei einem manuellen Löschen. Abgelaufene Elemente erscheinen daher nicht mehr in den
SearchVectorsErgebnissen, nachdem der Löschvorgang auf den Index übertragen wurde. - Import und Export von Tabellendaten
-
Sie können eine Tabelle mit einem Vektorindex nach Amazon S3 exportieren. Der Export enthält die Elemente der Basistabelle, einschließlich der darauf gespeicherten Vektorattribute. Wenn Sie Daten aus Amazon S3 in eine neue Tabelle importieren, definieren Sie den Vektorindex in der Importanforderung auf die gleiche Weise wie mit
CreateTable. DynamoDB indexiert die importierten Elemente, während sie geschrieben werden, und der Vektorindex wird nach Abschluss des Imports verfügbar. - DAX
-
DynamoDB Accelerator (DAX) unterstützt den
SearchVectorsVorgang nicht. Senden SieSearchVectorsAnfragen direkt an DynamoDB, auch wenn Ihre Anwendung DAX für andere Lesevorgänge verwendet. Das DAX-Caching von Lesevorgängen in Basistabellen wird durch das Vorhandensein eines Vektorindexes nicht beeinflusst. Wenn Sie eine Caching-Ebene für Vektor-Suchergebnisse benötigen, können SieSearchVectorsdie Antworten in einem externen Cache wie Amazon ElastiCache for Valkey zwischenspeichern. Sie sind dafür verantwortlich, diesen Cache zu füllen und ungültig zu machen.