View a markdown version of this page

Tutorial: Deine erste Vektorsuche - Amazon DynamoDB

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

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

Ü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 unterBewährte Methoden für Vektorindizes.

Voraussetzungen

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-AktionenCreateTable,,DescribeTable,PutItem,BatchWriteItem, und Scan SearchVectors UpdateTableDeleteTable, und für die Amazon Bedrock-Aktion. InvokeModel dynamodb:SearchVectorsist 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.

  • jqwurde 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 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.

SearchVectorsverwendet einen separaten Endpunkt

SearchVectorswird in einen dedizierten Suchendpunkt und nicht in den standardmäßigen DynamoDB-Endpunkt aufgelöst. In einer kommerziellen Region gehen Anfragen ansearch-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-SuchvorgangSearchConditionExpression.

    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. HASHSuchschemaelemente werden nicht auf das Limit angerechnet.

  2. Warten Sie, bis der Index aktiv wird. Lass das laufen, bis IndexStatus es soweit istACTIVE.

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

    Ein Index, der als Teil von erstellt wurdeCreateTable, 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.

    Backfillingwird für einen Vektorindex gemeldet, den Sie zu einer vorhandenen Tabelle hinzufügenUpdateTable. 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 verwendenaws dynamodb wait table-exists, um die Suche einzuschränken. Der Kellner passtTable.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. DeleteTablegibt die Meldung „Tabelle kann nicht gelöscht werden, während Indizes erstellt, aktualisiert oder gelöscht werden“ zurückResourceInUseException.

  3. 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.

  4. 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.

  5. 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.

  6. 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 wurdeFAILED, führen Sie die Schleife erneut aus. Es werden nur die fehlenden Dateien erneut versucht.

    InvokeModel Kontingente

    Amazon Bedrock wendet Preiskontingente für Anfragen anInvokeModel. 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.

  7. 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. BatchWriteItemkann 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.

  8. 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 übergebenSearchVectors, 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.

    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.

  9. 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:

    • COSINEund 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_PRODUCTgibt die Elemente mit den höchsten Punktzahlen zurück. Je höher desto ähnlicher.

    Dieser Index verwendetCOSINE, 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

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 SieUpdateTable. 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 unterLöschen eines Vektorindex.

Nächste Schritte

Nachdem Sie diese grundlegende Vektorsuche abgeschlossen haben, sollten Sie sich mit diesen verwandten Themen befassen.