

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.

# Tutorial: Deine erste Vektorsuche
<a name="VectorSearchTutorial"></a>

Stellen Sie sich einen Produktkatalog vor, in dem Käufer mit ihren eigenen Worten beschreiben, was sie wollen, anstatt exakte Stichwörter zu finden. Sie können eine Vektoreinbettung jeder Produktbeschreibung in DynamoDB speichern und dann einen Vektorindex abfragen, um die engsten Treffer zu finden.

Dieses Tutorial erstellt eine Tabelle mit einem Vektorindex, generiert 1024-Dimensions-Einbettungen mit Amazon Bedrock Titan Text Embeddings V2, lädt 50 Produkte und führt eine Ähnlichkeitssuche durch, die die 5 engsten Treffer zurückgibt. Jeder Befehl kann direkt in ein Terminal eingefügt werden. Hintergrundinformationen zur Funktionsweise von Einbettungen mit DynamoDB finden Sie unter. [Generieren von Vektor-Einbettungen](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Embeddings)

**Über Skalierung und Rückruf**  
Ein Produktionsvektorindex enthält Millionen bis Milliarden von Vektoren. Vektorindizes verwenden die ungefähre Suche nach dem nächsten Nachbarn, und die Erinnerungsmerkmale dieses Ansatzes werden erst in einem viel größeren Maßstab beobachtbar. Betrachten Sie den Katalog mit 50 Artikeln hier als Demonstration der Mechanik. Hinweise zur Dimensionierung und Abstimmung finden Sie unter[Bewährte Methoden für Vektorindizes](VectorSearchBestPractices.md).

## Voraussetzungen
<a name="VectorSearchTutorial.Prerequisites"></a>

Stellen Sie vor dem Beginn sicher, dass Sie über das Folgende verfügen:
+ AWS CLI Version 2.36.16 oder höher. Im Servicemodell-Update, das am 4. August 2026 veröffentlicht wurde, wurde die Unterstützung von Vektorindizes zu AWS CLI und den AWS SDKs hinzugefügt. Frühere Versionen erkennen den `--vector-indexes` Parameter oder den `search-vectors` Befehl nicht. Überprüfen Sie Ihre Version mit `aws --version` und führen Sie bei Bedarf ein Upgrade durch. Wenn Sie statt des ein AWS SDK verwenden AWS CLI, benötigen Sie `botocore` 1.43.64 oder höher oder die entsprechende Version Ihres Sprach-SDK.
+ Anmeldeinformationen mit Berechtigungen für die DynamoDB-Aktionen`CreateTable`,,`DescribeTable`,`PutItem`,`BatchWriteItem`, und `Scan` `SearchVectors` `UpdateTable``DeleteTable`, und für die Amazon Bedrock-Aktion. `InvokeModel` `dynamodb:SearchVectors`ist eine neue Aktion, daher enthalten bestehende Richtlinien, die DynamoDB-Lesezugriff gewähren, sie nicht.
+ Der Zugriff auf das Modell Titan Text Embeddings V2 ist in Amazon Bedrock für Ihr Konto und Ihre Region aktiviert. Der Zugriff auf das Amazon Bedrock-Modell wird pro Konto und pro Region gewährt. Sie müssen das Modell also aktivieren, bevor Sie es aufrufen können.
+ `jq`wurde installiert, um die Modellausgabe in das DynamoDB-Format umzuwandeln.
+ Eine Region, in der sowohl DynamoDB-Vektorindizes als auch Amazon Bedrock Titan Text Embeddings V2 verfügbar sind. Die Verfügbarkeit des Amazon Bedrock-Modells variiert je nach Region und deckt im Allgemeinen weniger ab als die DynamoDB-Region. Bestätigen Sie daher beide, bevor Sie eine Region auswählen. Informationen zur Verfügbarkeit von Amazon Bedrock-Modellen finden Sie unter [ Modellunterstützung nach AWS Regionen ](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) im Amazon Bedrock-Benutzerhandbuch. * *

**Gebühren**  
Für dieses Tutorial fallen Gebühren für das Aufrufen des Amazon Bedrock-Modells und den DynamoDB-Speicher an. Es führt 51 Einbettungsaufrufe aus, die jeweils als Amazon Bedrock-Inferenzanforderung in Rechnung gestellt werden, bei kurzen Eingaben aus einem Satz. DynamoDB-Speichergebühren fallen an, solange die Tabelle und der Vektorindex existieren.

**Bestätigen Sie, welche Region Sie verwenden**  
Jeder Befehl in diesem Tutorial muss in derselben Region ausgeführt werden. Bestätigen Sie die Region, die tatsächlich verwendet AWS CLI wird, bevor Sie beginnen, da sie `AWS_REGION` Vorrang `AWS_DEFAULT_REGION` vor der Einstellung in Ihrer Konfigurationsdatei hat und beide Vorrang vor der `region` Einstellung in Ihrer AWS CLI Konfigurationsdatei haben. Ein `AWS_REGION` Streuwert in Ihrer Shell erstellt die Tabelle an einer anderen Stelle als der von Ihnen beabsichtigten Region, und das Amazon Bedrock-Modell ist dort möglicherweise nicht aktiviert. Um alle Zweifel auszuräumen, geben Sie jeden `--region {{region}}` Befehl explizit weiter.

**`SearchVectors`verwendet einen separaten Endpunkt**  
`SearchVectors`wird in einen dedizierten Suchendpunkt und nicht in den standardmäßigen DynamoDB-Endpunkt aufgelöst. In einer kommerziellen Region gehen Anfragen an`search-dynamodb.{{region}}.amazonaws.com`, während alle anderen Operationen in diesem Tutorial an gehen. `dynamodb.{{region}}.amazonaws.com` FIPS- und Dual-Stack-Varianten folgen demselben Muster. Dies hat zwei Konsequenzen:  
Wenn Ihr Netzwerk den ausgehenden Verkehr über einen VPC-Endpunkt, einen Proxy oder eine Zulassungsliste für ausgehenden Datenverkehr einschränkt, müssen Sie auch die Suche nach dem Hostnamen zulassen. Andernfalls sind die Schreibvorgänge erfolgreich `CreateTable` und `SearchVectors` schlagen nur fehl, in der Regel mit einem Verbindungsfehler, der die Ursache nicht angibt.
Verwenden Sie nicht`--endpoint-url`, um den DynamoDB-Endpunkt für diese Befehle zu überschreiben. Eine einzelne Überschreibung kann nicht für beide Hostnamen verwendet werden und unterbricht das Suchrouting.

1. **Erstellen Sie eine Tabelle mit einem Vektorindex. ** Dadurch wird eine `Products` Tabelle mit einem Vektorindex erstellt, der nach `DescriptionIndex` dem `DescriptionVector` Attribut benannt ist. Der Index verwendet die `COSINE` Distanzfunktion mit 1024 Dimensionen, um der Ausgabe von Titan Text Embeddings V2 zu entsprechen. Da kein Vektorindex-Partitionsschlüssel definiert ist, benötigen Sie keinen To-Suchvorgang`SearchConditionExpression`.

   ```
   aws dynamodb create-table \
       --table-name Products \
       --attribute-definitions AttributeName=ProductId,AttributeType=S \
       --key-schema AttributeName=ProductId,KeyType=HASH \
       --billing-mode PAY_PER_REQUEST \
       --vector-indexes \
           "[
               {
                   \"IndexName\": \"DescriptionIndex\",
                   \"VectorAttribute\": {\"AttributeName\": \"DescriptionVector\"},
                   \"Projection\": {\"ProjectionType\": \"ALL\"},
                   \"Dimensions\": 1024,
                   \"DistanceFunction\": \"COSINE\"
               }
           ]"
   ```

   In diesem Beispiel wird `ProjectionType` von verwendet, `ALL` sodass jedes Attribut für die Suchergebnisse verfügbar ist. Wenn Sie `INCLUDE` stattdessen verwenden, beachten Sie, dass das prognostizierte Budget, das keine Schlüsselattribute sind, gemeinsam genutzt wird: Das Vektorattribut zählt als ein Attribut, und jedes `INLINE_FILTER` Suchschemaelement zählt als eines. `HASH`Suchschemaelemente werden nicht auf das Limit angerechnet.

1. **Warten Sie, bis der Index aktiv wird. ** Lass das laufen, bis `IndexStatus` es soweit ist`ACTIVE`.

   ```
   aws dynamodb describe-table \
       --table-name Products \
       --query 'Table.VectorIndexes[0].[IndexName,IndexStatus,Backfilling]'
   ```

   Ein Index, der als Teil von erstellt wurde`CreateTable`, wie in diesem Tutorial, `Backfilling` wird nicht gemeldet und der Befehl kehrt `null` dafür zurück. Verwenden Sie in diesem Fall `IndexStatus` allein als Ihr Signal.

   `Backfilling`wird für einen Vektorindex gemeldet, den Sie zu einer vorhandenen Tabelle hinzufügen`UpdateTable`. Warten Sie in diesem Fall, bis `IndexStatus` es soweit ist `ACTIVE` und `Backfilling` ist, `false` bevor Sie sich auf vollständige Suchergebnisse verlassen.
**Warten Sie auf den Index, nicht nur auf die Tabelle**  
Nicht verwenden`aws dynamodb wait table-exists`, um die Suche einzuschränken. Der Kellner passt`Table.TableStatus`, was so lange wird, `ACTIVE` wie der Vektorindex noch sein `CREATING` kann. Es gibt keinen Kellner für die Bereitschaft zum Vektorindex, also müssen Sie die Umfrage `DescribeTable` wie in der Abbildung gezeigt durchführen. Die Suche nach einem Index, der noch nicht existiert, `ACTIVE` schlägt fehl, und die Suche beim Auffüllen kann zu unvollständigen Ergebnissen führen.  
Aus dem gleichen Grund können Sie die Tabelle erst löschen, wenn die Erstellung aller Vektorindizes abgeschlossen ist. `DeleteTable`gibt die Meldung „Tabelle kann nicht gelöscht werden, während Indizes erstellt, aktualisiert oder gelöscht werden“ zurück`ResourceInUseException`.

1. **Erstellen Sie den Produktkatalog. ** Speichern Sie die folgenden 50 Produkte in einer tabulatorgetrennten Datei mit dem Namen. `products.tsv` Jede Zeile enthält eine Produkt-ID, einen Namen und eine Beschreibung in einem Satz. Der Katalog enthält zehn Gruppen mit fünf verwandten Produkten, sodass die Suchergebnisse im letzten Schritt leicht zu interpretieren sind.

   ```
   p01	Insulated Travel Mug	A vacuum insulated stainless steel mug that keeps hot drinks warm for up to twelve hours.
   p02	Stovetop Espresso Maker	A compact aluminum pot that brews strong espresso style coffee directly on a gas or electric burner.
   p03	Manual Burr Coffee Grinder	A hand cranked grinder with adjustable ceramic burrs for consistent coffee grounds.
   p04	Pour Over Coffee Dripper	A ceramic cone that sits on a mug and brews a single cup of filter coffee.
   p05	Electric Milk Frother	A handheld battery powered whisk that creates dense foam for lattes and cappuccinos.
   p06	Lightweight Running Shoe	A breathable mesh road shoe with cushioned foam midsole for daily training runs.
   p07	Trail Running Shoe	An aggressive lugged outsole shoe built for grip on loose gravel and muddy trails.
   p08	Moisture Wicking Running Socks	Ankle height socks knitted from synthetic yarn that pulls sweat away from the skin.
   p09	Reflective Running Vest	A lightweight vest with high visibility strips for running safely after dark.
   p10	Hydration Waist Belt	An elastic belt that holds two small water flasks and a phone during long runs.
   p11	Ergonomic Mesh Office Chair	An adjustable desk chair with breathable mesh back and lumbar support for long work sessions.
   p12	Sit Stand Desk Converter	A height adjustable platform that raises a monitor and keyboard for standing work.
   p13	Monitor Arm Mount	A clamp mounted articulating arm that lifts a display off the desk surface.
   p14	Under Desk Footrest	An angled cushioned platform that supports the feet and improves seated posture.
   p15	Wireless Split Keyboard	A two piece keyboard that separates for a natural shoulder width typing position.
   p16	Noise Cancelling Headphones	Over ear wireless headphones that actively silence engine noise on long flights.
   p17	Wireless Earbuds	Compact in ear buds with a charging case and multi hour battery for commuting.
   p18	Portable Bluetooth Speaker	A water resistant rechargeable speaker sized to fit in a backpack side pocket.
   p19	Studio Monitor Headphones	Wired closed back headphones with flat frequency response for audio mixing.
   p20	Wired Lapel Microphone	A small clip on microphone for recording clear speech during interviews.
   p21	Four Season Backpacking Tent	A double wall tent with an aluminum pole set rated for wind and heavy rain.
   p22	Down Sleeping Bag	A mummy shaped bag filled with compressible down insulation for cold weather camping.
   p23	Inflatable Sleeping Pad	A lightweight pad that inflates in a few breaths and packs down to bottle size.
   p24	Canister Camping Stove	A screw on burner that boils water quickly using a compact fuel canister.
   p25	Rechargeable Camp Lantern	A collapsible lantern with adjustable brightness and a built in battery.
   p26	Cast Iron Skillet	A preseasoned heavy pan that holds heat evenly for searing and oven baking.
   p27	Nonstick Frying Pan	A coated aluminum pan that releases eggs and fish without added oil.
   p28	Stainless Steel Stock Pot	A tall wide pot for boiling pasta and simmering large batches of soup.
   p29	Enameled Dutch Oven	A heavy lidded pot that moves from stovetop to oven for slow braising.
   p30	Bamboo Cutting Board	A large reversible board with a juice groove around the edge.
   p31	Padded Laptop Backpack	A water resistant pack with a suspended sleeve that protects a fifteen inch laptop.
   p32	Slim Laptop Sleeve	A close fitting neoprene case that shields a notebook inside a larger bag.
   p33	Rolling Carry On Suitcase	A hard shell four wheel case sized to fit most overhead cabin bins.
   p34	Packing Cube Set	Zippered fabric cubes that compress clothing and organize a suitcase.
   p35	Leather Messenger Bag	A single strap shoulder bag with a padded compartment and interior pockets.
   p36	Daily Facial Moisturizer	A light lotion with humectants that hydrates skin without leaving residue.
   p37	Mineral Sunscreen Lotion	A broad spectrum zinc based sunscreen formulated for sensitive facial skin.
   p38	Gentle Foaming Cleanser	A low pH face wash that removes oil and sunscreen without stripping the skin.
   p39	Vitamin C Serum	A brightening serum applied before moisturizer to even skin tone over time.
   p40	Overnight Repair Cream	A rich night cream with ceramides that restores the skin barrier while sleeping.
   p41	Stainless Steel Dog Bowl	A weighted nonslip bowl that resists tipping during enthusiastic feeding.
   p42	Padded Dog Harness	An adjustable chest harness that distributes pull away from the neck on walks.
   p43	Retractable Dog Leash	A spring loaded leash that extends and locks at several walking lengths.
   p44	Interactive Cat Puzzle Feeder	A slow feed tray that makes a cat work for dry food and eat more slowly.
   p45	Self Cleaning Litter Box	An enclosed box with a raking mechanism that sifts waste after each use.
   p46	Bypass Pruning Shears	Sharp hardened blades that make clean cuts on green stems and small branches.
   p47	Long Handled Garden Spade	A steel bladed spade with a wooden shaft for turning soil and digging beds.
   p48	Adjustable Hose Spray Nozzle	A metal nozzle that shifts from a fine mist to a strong jet stream.
   p49	Raised Garden Bed Kit	Interlocking cedar panels that assemble into an elevated planting box.
   p50	Drip Irrigation Starter Kit	Tubing and emitters that deliver water slowly to the base of each plant.
   ```

   Das Trennzeichen zwischen den drei Feldern muss ein literales Tabulatorzeichen sein. Wenn Sie den Katalog aus einem Browser kopieren, überprüfen Sie, ob die Tabs erhalten geblieben sind, bevor Sie fortfahren.

1. **Generieren Sie eine Einbettung für ein Produkt. ** Führen Sie zuerst einen einzigen Einbettungsaufruf durch, um zu bestätigen, dass Ihr Amazon Bedrock-Modellzugriff funktioniert. Das `inputText` Feld enthält den einzubettenden Text, `dimensions` legt die Ausgabegröße fest (gültige Werte sind 256, 512 oder 1024) und `normalize` erzeugt Vektoren mit Einheitslänge, was für die Suche nach Kosinusähnlichkeiten empfohlen wird.

   ```
   mkdir -p emb
   
   aws bedrock-runtime invoke-model \
       --model-id amazon.titan-embed-text-v2:0 \
       --body '{"inputText":"A vacuum insulated stainless steel mug that keeps hot drinks warm for up to twelve hours.","dimensions":1024,"normalize":true}' \
       --cli-binary-format raw-in-base64-out \
       --content-type application/json \
       --accept application/json \
       emb/p01.json
   ```

   Die `--cli-binary-format raw-in-base64-out` Flagge ist erforderlich. AWS CLI v2 verwendet standardmäßig die Base64-Kodierung für Binärparameter. Ohne dieses Flag kann der JSON-Rohtext also nicht korrekt gesendet werden. Die Antwort wird in ein `embedding` Array von 1024 Gleitkommazahlen geschrieben `emb/p01.json` und enthält dieses. Bestätigen Sie die Anzahl der Dimensionen.

   ```
   jq '.embedding | length' emb/p01.json
   ```

   Die Ausgabe lautet `1024`.

1. **Schreiben Sie das erste Produkt. ** Transformieren Sie die Einbettung in das DynamoDB-Elementformat und schreiben Sie sie. Das gespeicherte Vektorattribut verwendet den DynamoDB-Typ `L` (list), der jede Zahl in einen Typ umschließt. `N`

   ```
   jq '{"ProductId":{"S":"p01"},"Title":{"S":"Insulated Travel Mug"},"DescriptionVector":{"L":[.embedding[]|{"N":(.|tostring)}]}}' emb/p01.json > item-p01.json
   
   aws dynamodb put-item --table-name Products --item file://item-p01.json
   ```
**Vektorgröße und Elementbeschränkungen**  
Ein 1024-Dimensions-Vektor erhöht die Anforderungsnutzlast um etwa 32 KB und das gespeicherte Element um etwa 5 KB, was deutlich innerhalb der Größenbeschränkung von 400 KB für DynamoDB-Elemente liegt. Die Anzahl der Dimensionen ist der Hauptfaktor für die Elementgröße, wenn Sie Einbettungen speichern.

1. **Betten Sie die verbleibenden Produkte ein. ** Diese Schleife generiert eine Einbettung für jedes verbleibende Produkt. Es überspringt alle bereits vorhandenen Dateien, sodass Sie sie sicher erneut ausführen können, wenn ein Aufruf fehlschlägt.

   ```
   while IFS=$'\t' read -r id title description; do
       [ -s "emb/$id.json" ] && continue
       body=$(jq -n --arg t "$description" '{inputText:$t,dimensions:1024,normalize:true}')
       aws bedrock-runtime invoke-model \
           --model-id amazon.titan-embed-text-v2:0 \
           --body "$body" \
           --cli-binary-format raw-in-base64-out \
           --content-type application/json \
           --accept application/json \
           "emb/$id.json" >/dev/null || echo "FAILED $id"
   done < products.tsv
   
   ls emb/*.json | wc -l
   ```

   Die Anzahl muss 50 betragen, bevor Sie fortfahren. Falls ein Anruf gedruckt wurde`FAILED`, führen Sie die Schleife erneut aus. Es werden nur die fehlenden Dateien erneut versucht.
**InvokeModel Kontingente**  
Amazon Bedrock wendet Preiskontingente für Anfragen an`InvokeModel`. Wenn Sie diese Schleife so ändern, dass Aufrufe parallel ausgeführt werden, rechnen Sie bei einigen Aufrufen mit Drosselungsausnahmen und überprüfen Sie immer die endgültige Dateianzahl, anstatt davon auszugehen, dass jeder Anruf erfolgreich war. Ein teilweise eingebetteter Katalog wird ohne Fehler geladen und erzeugt Suchergebnisse, bei denen die fehlenden Produkte stillschweigend weggelassen werden.

1. **Laden Sie die verbleibenden Produkte. ** Nutzlasten für Build-Anfragen mit jeweils 25 Elementen. Das ist das Maximum, das `BatchWriteItem` akzeptiert wird.

   ```
   batch=0
   count=0
   echo -n '{"Products":[' > batch-0.json
   while IFS=$'\t' read -r id title description; do
       if [ "$count" -eq 25 ]; then
           echo ']}' >> "batch-$batch.json"
           batch=$((batch+1)); count=0
           echo -n '{"Products":[' > "batch-$batch.json"
       fi
       [ "$count" -gt 0 ] && echo -n ',' >> "batch-$batch.json"
       jq -c --arg id "$id" --arg title "$title" \
           '{PutRequest:{Item:{ProductId:{S:$id},Title:{S:$title},
             DescriptionVector:{L:[.embedding[]|{"N":(.|tostring)}]}}}}' \
           "emb/$id.json" >> "batch-$batch.json"
       count=$((count+1))
   done < <(tail -n +2 products.tsv)
   echo ']}' >> "batch-$batch.json"
   ```

   Die Schleife liest aus einer Weiterleitung und nicht aus einer Pipe, da eine über die Pipeline geleitete `while` Schleife in einigen Shells in einer Subshell läuft, wodurch die `count` AND-Werte verworfen werden `batch` und falsch formatierte Batchdateien erzeugt werden.

   Reichen Sie jeden Stapel ein. `BatchWriteItem`kann teilweise erfolgreich sein, also reichen Sie alles, was er zurückgibt, erneut ein. `UnprocessedItems`

   ```
   for f in batch-*.json; do
       cp "$f" pending.json
       for attempt in 1 2 3 4 5; do
           aws dynamodb batch-write-item \
               --request-items file://pending.json \
               --output json > resp.json
           left=$(jq '(.UnprocessedItems.Products // []) | length' resp.json)
           echo "$f attempt $attempt: unprocessed=$left"
           [ "$left" -eq 0 ] && break
           jq '.UnprocessedItems' resp.json > pending.json
           sleep 2
       done
   done
   ```

   Vergewissern Sie sich, dass alle 50 Artikel vorhanden sind.

   ```
   aws dynamodb scan --table-name Products --select COUNT --query 'Count'
   ```
**ItemCount Aktualisierungen sind verzögert**  
Die `IndexSizeBytes` Werte `ItemCount` und, die `DescribeTable` für einen Vektorindex gemeldet werden, werden ungefähr alle sechs Stunden aktualisiert, sodass sie auch unmittelbar nach dem Laden gelesen werden können, `0` obwohl jedes Element geschrieben wurde. Verwenden Sie `Scan``--select COUNT`, wie in der Abbildung gezeigt, with, um eine Ladung zu überprüfen. Behandeln Sie eine Null nicht `ItemCount` als fehlgeschlagenes Laden.

1. **Generieren Sie eine Abfrageeinbettung und Suche. ** Betten Sie den Suchbegriff mit demselben Modell und derselben Dimensionsanzahl ein, die Sie für die gespeicherten Elemente verwendet haben.

   ```
   aws bedrock-runtime invoke-model \
       --model-id amazon.titan-embed-text-v2:0 \
       --body '{"inputText":"How can I make my desk more comfortable to work at","dimensions":1024,"normalize":true}' \
       --cli-binary-format raw-in-base64-out \
       --content-type application/json \
       --accept application/json \
       embedding-query.json
   ```
**SearchVector Das Format unterscheidet sich vom gespeicherten Vektorformat**  
Wenn Sie einen Vektor in einem Elementattribut speichern, umschließen Sie ihn in einen `L` (Listen-) Typ:`{"L":[{"N":"0.123"},...]}`. Wenn Sie einen Abfrage-Vektor an übergeben`SearchVectors`, verwenden Sie ein einfaches Array von `N` Werten ohne den `L` Wrapper:`[{"N":"0.123"},...]`. Die folgende `jq` Transformation unterscheidet sich aus diesem Grund von der, die Sie für die gespeicherten Elemente verwendet haben. Weitere Informationen finden Sie unter [Einfache Suche](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Search.Basic).

   ```
   jq '[.embedding[]|{"N":(.|tostring)}]' embedding-query.json > query-vector.json
   
   aws dynamodb search-vectors \
       --table-name Products \
       --index-name DescriptionIndex \
       --search-vector file://query-vector.json \
       --top-k 5 \
       --projection-expression "ProductId, Title" \
       --return-consumed-capacity TOTAL
   ```

   Der Abfrage-Vektor und die gespeicherten Vektoren müssen aus demselben Einbettungsmodell stammen und dieselbe Anzahl von Dimensionen haben. Die Verwendung eines anderen Modells oder einer anderen Dimensionsanzahl führt zu bedeutungslosen Ergebnissen oder einem Validierungsfehler.

1. **Lesen Sie die Ergebnisse. ** DynamoDB gibt Ergebnisse zurück, die nach Ähnlichkeit sortiert sind, wobei das ähnlichste Element zuerst angezeigt wird. Jedes Ergebnis enthält die projizierten `Item` Attribute und a. `Score`

   ```
   {
       "SearchResults": [
           {
               "Item": {
                   "ProductId": { "S": "p11" },
                   "Title": { "S": "Ergonomic Mesh Office Chair" }
               },
               "Score": 0.6130197048187256
           },
           {
               "Item": {
                   "ProductId": { "S": "p12" },
                   "Title": { "S": "Sit Stand Desk Converter" }
               },
               "Score": 0.781868577003479
           },
           {
               "Item": {
                   "ProductId": { "S": "p14" },
                   "Title": { "S": "Under Desk Footrest" }
               },
               "Score": 0.816369354724884
           },
           {
               "Item": {
                   "ProductId": { "S": "p13" },
                   "Title": { "S": "Monitor Arm Mount" }
               },
               "Score": 0.8283305168151855
           },
           {
               "Item": {
                   "ProductId": { "S": "p15" },
                   "Title": { "S": "Wireless Split Keyboard" }
               },
               "Score": 0.8469693064689636
           }
       ],
       "ConsumedCapacity": {
           "VectorSearchRequestBytes": 31449.0
       }
   }
   ```

   Die Ergebnisse hängen vom Einbettungsmodell und dem genauen Eingabetext ab, sodass Ihre Werte leicht abweichen. Was zählt, ist, welche Elemente in welcher Reihenfolge ausgewählt wurden. Die Abfrage enthielt nicht die Wörter Stuhl, Monitor oder Tastatur, aber die Suche ergab alle fünf Schreibtisch- und Büroprodukte vor den anderen 45 Artikeln im Katalog. Es wird nichts aus den Gruppen Kaffee, Camping oder Haustiere angezeigt.

   Versuche es mit anderen Abfragen, um das gleiche Verhalten bei verschiedenen Gruppen zu sehen. Wiederhole den vorherigen Schritt mit `"Something to brew fresh coffee at home"` und die besten Ergebnisse sind die Espressomaschine, die Gießmaschine und der Milchaufschäumer. Wiederholen Sie diesen Vorgang mit `"Keeping my dog safe on walks"` und die Leine und das Gurtzeug stehen an erster Stelle, gefolgt von Artikeln, die nur lose miteinander verwandt sind, da der Katalog nur zwei Produkte enthält, die genau übereinstimmen. Der letzte Fall ist bemerkenswert: Die Suche gibt immer die Anzahl der Artikel zurück, nach denen Sie gefragt haben, auch wenn der Katalog nicht so viele gute Treffer enthält. Beurteilen Sie die Qualität der Treffer anhand der `Score` Werte, nicht anhand der Anzahl der Ergebnisse.

   Wie ein Ergebnis zu lesen ist, hängt von der Distanzfunktion ab, die der Index verwendet:
   + `COSINE`und `EUCLIDEAN` geben die Elemente mit den kleinsten Punktzahlen zurück, sodass ein niedrigerer Wert ähnlicher ist. Die Kosinuswerte reichen von 0 für identische Richtung bis 2 für entgegengesetzte Richtung.
   + `DOT_PRODUCT`gibt die Elemente mit den höchsten Punktzahlen zurück. Je höher desto ähnlicher.

   Dieser Index verwendet`COSINE`, sodass das erste Ergebnis die niedrigste Punktzahl hat. Bei der Suche mit Text, der mit einer gespeicherten Beschreibung identisch ist, wird das Element zuerst mit einer Punktzahl von oder nahe Null zurückgegeben.

## Bereinigen
<a name="VectorSearchTutorial.Cleanup"></a>

Löschen Sie die Ressourcen, die Sie in diesem Tutorial erstellt haben, um laufende Gebühren zu vermeiden. Der Vektorindexspeicher wird so lange in Rechnung gestellt, wie der Index existiert, unabhängig davon, ob Sie Suchvorgänge anhand des Index ausführen oder nicht.

Um den Vektorindex zu löschen, aber die `Products` Tabelle und ihre Elemente beizubehalten, verwenden Sie`UpdateTable`. Die Elemente bleiben in der Tabelle und nur der Index wird entfernt.

```
aws dynamodb update-table \
    --table-name Products \
    --vector-index-updates \
        "[
            {\"Delete\": {\"IndexName\": \"DescriptionIndex\"}}
        ]"
```

Um die Tabelle und ihren Vektorindex zusammen zu löschen, löschen Sie die Tabelle.

```
aws dynamodb delete-table --table-name Products
```

Vergewissern Sie sich, dass die Tabelle nicht mehr verfügbar ist. Der folgende Befehl gibt einen Wert zurück, `ResourceNotFoundException` sobald der Löschvorgang abgeschlossen ist.

```
aws dynamodb describe-table --table-name Products
```

Weitere Hinweise zum Entfernen eines Vektorindexes aus einer Tabelle, die Sie behalten möchten, finden Sie unter[Löschen eines Vektorindex](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Delete).

## Nächste Schritte
<a name="VectorSearchTutorial.NextSteps"></a>

Nachdem Sie diese grundlegende Vektorsuche abgeschlossen haben, sollten Sie sich mit diesen verwandten Themen befassen.
+ Suchergebnisse mit einem Vektorindex-Partitionsschlüssel und Inline-Filtern filtern — siehe[Einfache Suche](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Search.Basic).
+ Bewährte Methoden für die Auswahl von Abstandsfunktionen, Partitionstasten und Dimensionen — siehe[Bewährte Methoden für Vektorindizes](VectorSearchBestPractices.md).
+ Überwachung der Kapazität und der Metriken von Vektorindizes — siehe[Überwachung der Vektorindexkapazität](VectorSearchMonitoring.md).