

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.

# Bewährte Methoden für Vektorindizes
<a name="VectorSearchBestPractices"></a>

Die folgenden Empfehlungen helfen Ihnen beim Entwerfen genauer, leistungsfähiger und kostengünstiger Vektorindizes.

## Wählen Sie zuerst Ihr Einbettungsmodell und Ihre Abmessungen
<a name="VectorSearchBestPractices.Dimensions"></a>

Das von Ihnen verwendete Einbettungsmodell bestimmt die Anzahl der Dimensionen, die Ihre Vektoren haben, und die Sie `Dimensions` bei der Indexerstellung festlegen. Sie können die Anzahl der Dimensionen nach der Erstellung nicht ändern. Entscheiden Sie sich für ein Einbettungsmodell, bevor Sie den Index erstellen, und verwenden Sie dasselbe Modell, um sowohl gespeicherte Vektoren als auch Abfragevektoren zu generieren. Weniger Dimensionen reduzieren die Such-, Schreib- und Speicherkosten, aber höherdimensionale Modelle können mehr semantische Details erfassen. Wählen Sie die kleinste Anzahl von Dimensionen, die Ihren Relevanzanforderungen entspricht. Siehe [Generieren von Vektor-Einbettungen](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Embeddings).

## Passen Sie die Distanzfunktion an Ihre Einbettungen an
<a name="VectorSearchBestPractices.DistanceFunction"></a>

Wählen Sie die Distanzfunktion, die der Darstellung der Ähnlichkeit durch Ihr Einbettungsmodell entspricht. `COSINE`vergleicht die Richtung und ignoriert die Größe, was für die meisten Texteinbettungsmodelle geeignet ist. `EUCLIDEAN`misst die absolute Entfernung und reagiert empfindlich auf die Größe. `DOT_PRODUCT`reagiert auch empfindlich auf die Größe. Wenn Sie es verwenden, normalisieren Sie Ihre Einbettungen auf Längeneinheiten, sodass die Punktzahlen die Richtung und nicht die Vektorlänge widerspiegeln. Sie können die Entfernungsfunktion nicht mehr ändern, nachdem Sie den Index erstellt haben. Überprüfen Sie Ihre Auswahl daher zunächst anhand eines repräsentativen Datensatzes. Siehe [Wie ordnen Entfernungsfunktionen Ergebnisse](VectorSearch.md#VectorSearchWorkingWith.Ranking).

## Wählen Sie einen Partitionsschlüssel, der Ihren Abfragemustern entspricht
<a name="VectorSearchBestPractices.PartitionKey"></a>

Ein Partitionsschlüssel beschränkt jeden `SearchVectors` Aufruf auf den Teil des Vektorindexes, der zu einem einzelnen Partitionsschlüsselwert gehört. Der Aufruf durchsucht nicht den gesamten Index. Die Suche nach weniger Daten senkt die Kosten, kann die Latenz und den Abruf verbessern und skaliert den Durchsatz horizontal über Partitionsschlüsselwerte hinweg.

Sie müssen bei jeder Suche den Partitionsschlüsselwert angeben. `SearchConditionExpression` Jede Suche ist auf genau einen Partitionsschlüsselwert beschränkt. Wählen Sie einen Partitionsschlüssel, der den von Ihrer Anwendung unterstützten Abfragemustern entspricht.

Wenn Sie beispielsweise standortbezogene Daten nach US-Bundesstaaten speichern, haben Sie ungefähr 50 Partitionsschlüsselwerte. Jeder Bundesstaat enthält eine aussagekräftige Anzahl von Vektoren, sodass Sie sie sich gut merken können. Die 50 Partitionen ermöglichen eine bis zu etwa 50-fache horizontale Durchsatzskalierung. Dies funktioniert, wenn jede Suche auf einen einzelnen Bundesstaat abzielt.

Vermeiden Sie extreme Kardinalität in beide Richtungen:
+ **Zu hoch ** (z. B. eine eindeutige Element-ID) — Jede Partition enthält ein einzelnes Element ohne vergleichbare Nachbarn, was zu einem schlechten Abruf führt.
+ **Zu niedrig ** (z. B. ein boolescher Wert) — Die meisten Elemente landen in einer Partition, was die Durchsatzskalierung einschränkt und die Latenz und die Kostenvorteile reduziert.

Verwenden Sie Inline-Filterattribute, um innerhalb einer Partition weiter zu filtern.

**Beispiel für einen Durchsatz. ** Stellen Sie sich ein 768-dimensionales Einbettungsmodell (wie Cohere Embed v3) mit 1 KB an Nicht-Vektor-Elementdaten vor, was einer Gesamtgröße von ca. 4 KB (768 Dimensionen × 4 Byte \+ 1 KB) entspricht. Bei dieser Elementgröße ergeben sich die Grenzwerte pro Partitionsschlüssel wie folgt:
+ **Suche: ** 1 Gbit/s ÷ 4 KB ≈ 250.000 untersuchte Vektoren pro Sekunde pro Partitionsschlüsselwert. Wenn die Anzahl der Vektoren in einer Partition zunimmt, werden bei jeder Suche mehr Daten untersucht, und Sie werden sich dieser Grenze früher nähern.
+ **Schreiben: ** 10 MBps ÷ 4 KB ≈ 2.500 Vektorschreibvorgänge pro Sekunde pro Partitionsschlüsselwert

Wenn Sie Ihre Daten auf mehrere Partitionsschlüsselwerte verteilen, werden diese Grenzwerte vervielfacht. Beispielsweise bieten 50 Partitionsschlüsselwerte den bis zu 50-fachen Gesamtdurchsatz für Suchen und Schreiben. Wenn Ihre Arbeitslast diese Grenzwerte pro Partitionsschlüssel überschreitet, wenden Sie sich an den Support. AWS 

## Synchronisieren Sie die Einbettungen mit dem Quellinhalt
<a name="VectorSearchBestPractices.StaleEmbeddings"></a>

DynamoDB berechnet Einbettungen nicht für Sie neu. Wenn Sie den Quellinhalt ändern, den eine Einbettung darstellt, regenerieren Sie den Vektor mit demselben Einbettungsmodell und schreiben Sie ihn zurück in das Element. Andernfalls gibt der Index weiterhin Ergebnisse zurück, die auf dem veralteten Vektor basieren. Erwägen Sie, Inhaltsänderungen mit DynamoDB Streams zu erfassen und einen Downstream-Prozess zu verwenden, um die betroffenen Einbettungen zu regenerieren und neu zu schreiben.

## Projizieren Sie nur die Attribute, die Sie benötigen
<a name="VectorSearchBestPractices.Projection"></a>

`SearchVectors`kann keine Attribute zurückgeben, die nicht in den Vektorindex projiziert werden. Die Projektion weiterer Attribute erhöht die Speicher- und Schreibkosten für den Index. Projizieren Sie die Attribute, die Ihre Anwendung liest, direkt aus den Suchergebnissen und rufen Sie den Rest bei Bedarf mit einem Follow-up `GetItem` oder `BatchGetItem` in der Basistabelle ab.

## Verwenden Sie mehrere Indizes, um Einbettungsmodelle zu vergleichen
<a name="VectorSearchBestPractices.MultipleIndexes"></a>

Sie können bis zu 5 Vektorindizes für eine einzelne Tabelle erstellen. Verwenden Sie separate Indizes, um verschiedene Einbettungsmodelle oder Modellversionen nebeneinander zu bewerten. Speichern Sie die Einbettungen jedes Modells in einem anderen Vektorattribut und erstellen Sie für jedes Modell einen Vektorindex. Auf diese Weise können Sie die Suchqualität zwischen Modellen mit denselben zugrunde liegenden Daten vergleichen, ohne Ihren Produktionsindex migrieren zu müssen.

Erstellen Sie beispielsweise beim Upgrade von einer Modellversion auf eine andere einen zweiten Index mit den Abmessungen und der Abstandsfunktion des neuen Modells. Füllen Sie ihn mit Einbettungen aus dem neuen Modell auf, führen Sie Testabfragen für beide Indizes aus und vergleichen Sie die Relevanz. Wenn Sie zufrieden sind, migrieren Sie Ihre Anwendung auf den neuen Index und löschen Sie den alten Index.