

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
<a name="VectorSearch"></a>

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 ](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_SearchVectors.html) 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 (for`CreateTable`) und dem `VectorIndexUpdates` Parameter (for). `UpdateTable`

**Topics**
+ [Anwendungsfälle für Vektorindizes](#VectorSearch.UseCases)
+ [Vergleich von Vektorindizes mit Sekundärindizes](#VectorSearch.WhatAre)
+ [Distanzfunktionen](#VectorSearch.DistanceFunctions)
+ [Wie ordnen Entfernungsfunktionen Ergebnisse](#VectorSearchWorkingWith.Ranking)
+ [SearchSchema](#VectorSearch.SearchSchema)
+ [Projektionen](#VectorSearch.Projections)
+ [Verwenden von Vektorindizes mit anderen DynamoDB-Funktionen](#VectorSearch.FeatureInteractions)
+ [Vektorindizes erstellen und durchsuchen](VectorSearchWorkingWith.md)
+ [Anforderungen und Einschränkungen](VectorSearch.Requirements.md)
+ [Sicherheit mit Zugriffskontrolle](VectorSearch.Security.md)
+ [Tutorial: Deine erste Vektorsuche](VectorSearchTutorial.md)
+ [Datensynchronisierung zwischen Tabellen und Vektorindizes](VectorSearchDataSync.md)
+ [Bewährte Methoden für Vektorindizes](VectorSearchBestPractices.md)
+ [Überlegungen zur Speicherung von Vektorindizes](VectorSearchStorage.md)
+ [Überwachung der Vektorindexkapazität](VectorSearchMonitoring.md)
+ [Problembehandlung bei Vektorindizes](VectorSearchTroubleshooting.md)
+ [Verwendung von Vektorindizes mit globalen Tabellen](VectorSearchGlobalTables.md)

## Anwendungsfälle für Vektorindizes
<a name="VectorSearch.UseCases"></a>

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
<a name="VectorSearch.WhatAre"></a>

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
<a name="VectorSearch.DistanceFunctions"></a>

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 unter[Wie ordnen Entfernungsfunktionen Ergebnisse](#VectorSearchWorkingWith.Ranking).

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 `COSINE` fü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 Embed  
`COSINE`eignet sich gut für die folgenden Anwendungsfälle:  
+ Semantische Suche in Produktbeschreibungen oder Dokumenten
+ Retrieval Augmented Generation (RAG)
+ FAQ-Matching
`COSINE`ist die sichere Standardeinstellung, wenn Sie sich nicht sicher sind, welche Funktion Sie verwenden sollen.

`DOT_PRODUCT`  
`DOT_PRODUCT`reagiert sowohl auf die Richtung als auch auf die Größe (die Länge eines Vektors). Wählen Sie aus`DOT_PRODUCT`, wann in der Dokumentation Ihres Einbettungsmodells das Punktprodukt als Ähnlichkeitsmaß empfohlen wird oder wann die Vektorlänge die Rangfolge beeinflussen soll.  
`DOT_PRODUCT`eignet 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_PRODUCT` Rangfolgen 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. `EUCLIDEAN`reagiert empfindlich auf die Größe. Verwenden Sie es, wenn es auf die absolute Position im Einbettungsbereich ankommt.  
`EUCLIDEAN`eignet 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](VectorSearchBestPractices.md#VectorSearchBestPractices.DistanceFunction).

## Wie ordnen Entfernungsfunktionen Ergebnisse
<a name="VectorSearchWorkingWith.Ranking"></a>

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:
+ `COSINE`ignoriert die Größe. Es bewertet `[1, 0, 0, 0]` und `[10, 0, 0, 0]` identisch (beide`0.0`), weil sie in dieselbe Richtung zeigen. `EUCLIDEAN`rangiert 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_PRODUCT`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
<a name="VectorSearch.SearchSchema"></a>

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 partitioniert Ihre Indexdaten für eine unabhängige Skalierung. Wenn Sie einen Vektorindex-Partitionsschlüssel angeben, werden Elemente mit demselben Partitionsschlüsselwert zusammen gespeichert, sodass das System nur die relevanten Daten durchsuchen kann. Bei hoher Skalierung verringert dies die Suchlatenz, da bei der Suche nur eine Teilmenge des Vektorraums und nicht der gesamte Index untersucht wird. Verwenden Sie Attribute mit niedriger bis mittlerer Kardinalität, wie z. B. oder. `Category` `Country` Sie 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 aufrufen`SearchVectors`.  
**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 `SearchVectors` Aufruf 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](VectorSearchBestPractices.md#VectorSearchBestPractices.PartitionKey).

`INLINE_FILTER`  
Inline-Filterattribute werden in den Vektorindex projiziert, sodass DynamoDB während der Suche auf der Speicherebene filtern kann.  
Inline-Filter unterstützen den Gleichheitsoperator (`=`) in. `SearchConditionExpression` 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 keinen benötigen`SearchConditionExpression`, aber er skaliert nicht horizontal. Wenn Ihr Index wächst, werden bei jeder Suche mehr Daten untersucht, was die Latenz und die Kosten erhöht. 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](VectorSearchBestPractices.md#VectorSearchBestPractices.PartitionKey).

## Projektionen
<a name="VectorSearch.Projections"></a>

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 den `KEYS_ONLY` Attributen 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 sie`ALL`.

## Verwenden von Vektorindizes mit anderen DynamoDB-Funktionen
<a name="VectorSearch.FeatureInteractions"></a>

DynamoDB Streams  
Sie können DynamoDB-Streams für eine Tabelle mit einem Vektorindex aktivieren, entweder mit dem `StreamSpecification` Parameter beim Erstellen der Tabelle oder über. `UpdateTable` Der 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. `UpdateTable` Die 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 `SearchVectors` in 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 Replikation und Indizierung von Vektoren in den anderen Regionen erfolgen asynchron, selbst bei globalen MRSC-Tabellen (Multiregion Strong Consistency). Ein Vektor, den Sie gerade in eine Region geschrieben haben, erscheint in einer anderen Region möglicherweise noch nicht in den `SearchVectors` Ergebnissen, bis die Änderung übernommen wurde.  
**On-demand Kapazität erforderlich**  
Vektorindizes benötigen den On-Demand-Kapazitätsmodus, den auch globale Tabellen unterstützen. 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 `IndexStatus` wiederhergestellten Index steht `ACTIVE` und `Backfilling` ist`false`, 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 `SearchVectors` Ergebnissen, 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 `SearchVectors` Vorgang nicht. Senden Sie `SearchVectors` Anfragen 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.