

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Tutoriel : Votre première recherche vectorielle
<a name="VectorSearchTutorial"></a>

Imaginez un catalogue de produits dans lequel les acheteurs décrivent ce qu'ils veulent avec leurs propres mots au lieu de faire correspondre des mots clés exacts. Vous pouvez stocker une intégration vectorielle de chaque description de produit dans DynamoDB, puis interroger un index vectoriel pour trouver les correspondances les plus proches.

Ce didacticiel crée un tableau avec un index vectoriel, génère des intégrations en 1024 dimensions avec Amazon Bedrock Titan Text Embeddings V2, charge 50 produits et exécute une recherche de similarité qui renvoie les 5 correspondances les plus proches. Chaque commande peut être collée directement dans un terminal. Pour plus d'informations sur le fonctionnement des intégrations avec DynamoDB, consultez. [Génération d'intégrations vectorielles](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Embeddings)

**À propos de la balance et du rappel**  
Un indice des vecteurs de production contient des millions, voire des milliards de vecteurs. Les index vectoriels utilisent la recherche approximative du voisin le plus proche, et les caractéristiques de rappel de cette approche ne deviennent observables qu'à une échelle beaucoup plus grande. Considérez le catalogue de 50 articles ici comme une démonstration des mécanismes. Pour obtenir des conseils sur le dimensionnement et le réglage, voir[Meilleures pratiques pour les index vectoriels](VectorSearchBestPractices.md).

## Conditions préalables
<a name="VectorSearchTutorial.Prerequisites"></a>

Avant de commencer, assurez-vous de disposer des éléments suivants :
+ AWS CLI version 2.36.16 ou ultérieure. La prise en charge des index vectoriels a été ajoutée aux AWS SDK AWS CLI et aux kits de développement logiciel dans la mise à jour du modèle de service publiée le 4 août 2026. Les versions précédentes ne reconnaissaient ni le `--vector-indexes` paramètre ni la `search-vectors` commande. Vérifiez votre version `aws --version` et mettez-la à niveau si nécessaire. Si vous utilisez un AWS SDK au lieu de AWS CLI, vous aurez besoin de la version `botocore` 1.43.64 ou ultérieure, ou de la version équivalente de votre SDK linguistique.
+ Informations d'identification avec autorisations pour les actions DynamoDB`CreateTable`,`DescribeTable`,`PutItem`,`BatchWriteItem`,`Scan`, et `SearchVectors` `UpdateTable``DeleteTable`, et pour l'action Amazon Bedrock. `InvokeModel` `dynamodb:SearchVectors`est une nouvelle action. Par conséquent, les politiques existantes qui accordent un accès en lecture à DynamoDB ne l'incluent pas.
+ Accès au modèle Titan Text Embeddings V2 activé dans Amazon Bedrock pour votre compte et votre région. L'accès au modèle Amazon Bedrock est accordé par compte et par région. Vous devez donc activer le modèle avant de pouvoir l'appeler.
+ `jq`installé pour remodeler la sortie du modèle au format DynamoDB.
+ Région dans laquelle les index vectoriels DynamoDB et Amazon Bedrock Titan Text Embeddings V2 sont disponibles. La disponibilité du modèle Amazon Bedrock varie selon les régions et est généralement plus restreinte que la couverture régionale DynamoDB. Vérifiez donc les deux avant de choisir une région. Pour en savoir plus sur la disponibilité des modèles Amazon Bedrock, consultez la section Prise en charge des [ modèles par AWS région ](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) dans le guide de l'utilisateur d'*Amazon Bedrock. *

**Frais**  
Ce didacticiel entraîne des frais pour les appels au modèle Amazon Bedrock et le stockage DynamoDB. Il effectue 51 appels d'intégration, chacun étant facturé comme une demande d'inférence Amazon Bedrock, sur de courtes entrées d'une seule phrase. Les frais de stockage DynamoDB s'appliquent tant que la table et l'index vectoriel existent.

**Confirmez la région que vous utilisez**  
Toutes les commandes de ce didacticiel doivent être exécutées dans la même région. Vérifiez la région qu'il AWS CLI utilisera réellement avant de commencer, car elle `AWS_REGION` a priorité sur`AWS_DEFAULT_REGION`, et les deux ont priorité sur le `region` paramètre de votre fichier de AWS CLI configuration. Une `AWS_REGION` valeur errante dans votre shell crée la table ailleurs que dans la région que vous souhaitiez, et le modèle Amazon Bedrock n'y est peut-être pas activé. Pour lever tout doute, passez `--region {{region}}` explicitement chaque commande.

**`SearchVectors`utilise un point de terminaison distinct**  
`SearchVectors`aboutit à un point de terminaison de recherche dédié plutôt qu'au point de terminaison DynamoDB standard. Dans une région commerciale, les demandes sont adressées à`search-dynamodb.{{region}}.amazonaws.com`, tandis que toutes les autres opérations de ce didacticiel sont envoyées à`dynamodb.{{region}}.amazonaws.com`. Les variantes FIPS et Dual-Stack suivent le même schéma. Cela a deux conséquences :  
Si votre réseau restreint le trafic sortant via un point de terminaison VPC, un proxy ou une liste d'autorisation de sortie, vous devez également autoriser le nom d'hôte de recherche. Dans le cas contraire`CreateTable`, les opérations d'écriture réussissent et `SearchVectors` échouent uniquement, généralement avec une erreur de connexion qui n'en indique pas la cause.
Ne pas utiliser `--endpoint-url` pour remplacer le point de terminaison DynamoDB pour ces commandes. Un seul remplacement ne peut pas servir les deux noms d'hôte et interrompra le routage des recherches.

1. **Créez un tableau avec un index vectoriel. ** Cela crée une `Products` table avec un index vectoriel nommé `DescriptionIndex` sur l'`DescriptionVector`attribut. L'index utilise la fonction de `COSINE` distance avec 1024 dimensions pour correspondre à la sortie Titan Text Embeddings V2. Aucune clé de partition d'index vectoriel n'étant définie, vous n'avez pas besoin `SearchConditionExpression` de recherche.

   ```
   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\"
               }
           ]"
   ```

   Cet exemple utilise `ProjectionType` of `ALL` pour que chaque attribut soit disponible dans les résultats de recherche. Si vous l'utilisez à la `INCLUDE` place, notez que le budget d'attributs non clés projeté est partagé : l'attribut vectoriel compte comme un attribut et chaque élément du schéma `INLINE_FILTER` de recherche compte comme un seul. `HASH`les éléments du schéma de recherche ne sont pas pris en compte dans la limite.

1. **Attendez que l'index soit actif. ** Exécutez-le jusqu'à ce que ce `IndexStatus` soit le `ACTIVE` cas.

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

   Car un index créé dans le cadre de`CreateTable`, comme dans ce didacticiel, n'`Backfilling`est pas signalé et la commande `null` le renvoie. `IndexStatus`Utilisez-le seul comme signal dans ce cas.

   `Backfilling`est indiqué pour un index vectoriel que vous ajoutez à une table existante avec`UpdateTable`. Dans ce cas, attendez que « `IndexStatus` est » `ACTIVE` et « `Backfilling` est » `false` avant de vous fier aux résultats de recherche complets.
**Attendez l'index, pas seulement le tableau**  
Ne pas utiliser `aws dynamodb wait table-exists` pour limiter la recherche. Ce serveur continue`Table.TableStatus`, ce qui devient `ACTIVE` alors que l'indice vectoriel peut encore être`CREATING`. Il n'y a pas de serveur pour la préparation de l'indice vectoriel, vous devez donc effectuer `DescribeTable` le sondage comme indiqué. La recherche dans un index qui ne l'est pas encore `ACTIVE` échoue et la recherche pendant le remplissage peut renvoyer des résultats incomplets.  
Pour la même raison, vous ne pouvez pas supprimer la table tant que la création de chaque index vectoriel n'est pas terminée. `DeleteTable`renvoie `ResourceInUseException` le message « Impossible de supprimer la table pendant la création, la mise à jour ou la suppression des index ».

1. **Créez le catalogue de produits. ** Enregistrez les 50 produits suivants dans un fichier séparé par des tabulations nommé. `products.tsv` Chaque ligne contient un identifiant de produit, un nom et une description en une phrase. Le catalogue contient dix groupes de cinq produits connexes, ce qui facilite l'interprétation des résultats de recherche de la dernière étape.

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

   Le séparateur entre les trois champs doit être un caractère de tabulation littéral. Si vous copiez le catalogue depuis un navigateur, vérifiez que les onglets ont survécu avant de continuer.

1. **Générez une intégration pour un produit. ** Lancez d'abord un seul appel d'intégration pour confirmer que l'accès à votre modèle Amazon Bedrock fonctionne. Le `inputText` champ contient le texte à intégrer, `dimensions` définit la taille de sortie (les valeurs valides sont 256, 512 ou 1024) et `normalize` produit des vecteurs de longueur unitaire, ce qui est recommandé pour la recherche de similarité en cosinus.

   ```
   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
   ```

   Le `--cli-binary-format raw-in-base64-out` drapeau est obligatoire. AWS CLI La v2 utilise par défaut le codage base64 pour les paramètres binaires. Ainsi, sans cet indicateur, le corps JSON brut ne sera pas envoyé correctement. La réponse est écrite `emb/p01.json` et contient un `embedding` tableau de 1024 nombres à virgule flottante. Confirmez le nombre de dimensions.

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

   La sortie est alors `1024`.

1. **Écrivez le premier produit. ** Transformez l'incorporation au format d'élément DynamoDB et écrivez-le. L'attribut vectoriel stocké utilise le type DynamoDB `L` (liste) encapsulant chaque nombre dans un `N` type.

   ```
   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
   ```
**Taille du vecteur et limites d'éléments**  
Un vecteur de 1024 dimensions ajoute environ 32 Ko à la charge utile de la demande et environ 5 Ko à l'élément stocké, bien en deçà de la limite de taille d'élément DynamoDB de 400 Ko. Le nombre de dimensions est le principal facteur qui détermine la taille des éléments lorsque vous stockez des intégrations.

1. **Intégrez les produits restants. ** Cette boucle génère une intégration pour chaque produit restant. Il ignore tout fichier existant, vous pouvez donc le réexécuter en toute sécurité en cas d'échec d'un appel.

   ```
   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
   ```

   Vous devez compter 50 avant de continuer. Si un appel est affiché`FAILED`, relancez la boucle ; elle réessaie uniquement les fichiers manquants.
**InvokeModel quotas tarifaires**  
Amazon Bedrock applique des quotas de demande à. `InvokeModel` Si vous modifiez cette boucle pour émettre des appels en parallèle, attendez-vous à des exceptions de limitation sur certains appels et vérifiez toujours le nombre final de fichiers plutôt que de supposer que chaque appel a réussi. Un catalogue partiellement intégré se charge sans erreur et produit des résultats de recherche qui omettent silencieusement les produits manquants.

1. **Chargez les produits restants. ** Créez des charges utiles de demandes de 25 éléments chacune, soit le maximum `BatchWriteItem` accepté.

   ```
   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"
   ```

   La boucle se lit à partir d'une redirection plutôt que d'un tube, car une `while` boucle canalisée s'exécute dans un sous-shell de certains interpréteurs, ce qui supprime les `count` valeurs `batch` et et produit des fichiers batch mal formés.

   Soumettez chaque lot. `BatchWriteItem`peut partiellement réussir, alors soumettez à nouveau tout ce qu'il renvoie. `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
   ```

   Vérifiez que les 50 éléments sont présents.

   ```
   aws dynamodb scan --table-name Products --select COUNT --query 'Count'
   ```
**ItemCount les mises à jour sont retardées**  
Les `IndexSizeBytes` valeurs `ItemCount` et déclarées pour `DescribeTable` un index vectoriel sont mises à jour toutes les six heures environ. Ainsi, immédiatement après un chargement, elles peuvent toujours être lues `0` même si chaque élément a été écrit. Utilisez `Scan` with`--select COUNT`, comme indiqué, pour vérifier une charge. Ne considérez pas un zéro `ItemCount` comme un échec de chargement.

1. **Générez une requête incorporant et recherchez. ** Intégrez la phrase de recherche avec le même modèle et le même nombre de dimensions que ceux que vous avez utilisés pour les éléments stockés.

   ```
   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 le format diffère du format vectoriel stocké**  
Lorsque vous stockez un vecteur dans un attribut d'élément, vous l'encapsulez dans un type `L` (liste) :`{"L":[{"N":"0.123"},...]}`. Lorsque vous passez un vecteur de requête à`SearchVectors`, vous utilisez un tableau simple de `N` valeurs sans le `L` wrapper :`[{"N":"0.123"},...]`. La `jq` transformation suivante diffère de celle que vous avez utilisée pour les éléments stockés pour cette raison. Pour de plus amples informations, veuillez consulter [Recherche de base](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
   ```

   Le vecteur de requête et les vecteurs stockés doivent provenir du même modèle d'intégration et doivent avoir le même nombre de dimensions. L'utilisation d'un modèle ou d'un nombre de dimensions différent produit des résultats inutiles ou une erreur de validation.

1. **Lisez les résultats. ** DynamoDB renvoie les résultats triés par similarité, en commençant par l'élément le plus similaire. Chaque résultat contient les `Item` attributs projetés et `Score` a.

   ```
   {
       "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
       }
   }
   ```

   Les scores dépendent du modèle d'intégration et du texte d'entrée exact. Vos valeurs peuvent donc légèrement différer. Ce qui compte, c'est quels articles ont été sélectionnés et dans quel ordre. La requête ne contenait pas les mots chaise, écran ou clavier, mais la recherche a renvoyé les cinq produits de bureau et de bureau devant les 45 autres articles du catalogue. Rien du café, du camping ou des groupes d'animaux de compagnie n'apparaît.

   Essayez d'autres requêtes pour constater le même comportement avec différents groupes. Répétez l'étape précédente `"Something to brew fresh coffee at home"` et vous obtiendrez les meilleurs résultats avec la machine à expresso, le compte-gouttes et le mousseur à lait. Répétez cette opération `"Keeping my dog safe on walks"` et la laisse et le harnais passeront en premier, suivis des articles qui ne sont que faiblement liés, car le catalogue ne contient que deux produits qui se ressemblent étroitement. Ce dernier cas mérite d'être noté : la recherche renvoie toujours le nombre d'articles que vous demandez, même lorsque le catalogue ne contient pas autant de bonnes correspondances. Utilisez les `Score` valeurs, et non le nombre de résultats, pour évaluer la qualité des matchs.

   La façon de lire une partition dépend de la fonction de distance utilisée par l'indice :
   + `COSINE`et `EUCLIDEAN` renvoyez les éléments avec les scores les plus faibles, de sorte que le score le plus bas soit plus similaire. Les scores de cosinus vont de 0 pour une direction identique à 2 pour une direction opposée.
   + `DOT_PRODUCT`renvoie les éléments ayant obtenu les scores les plus élevés, donc plus élevé est plus similaire.

   Cet indice utilise`COSINE`, donc le premier résultat obtient le score le plus bas. La recherche avec un texte identique à une description enregistrée renvoie cet élément en premier avec un score égal ou proche de zéro.

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

Pour éviter des frais permanents, supprimez les ressources que vous avez créées dans ce didacticiel. Le stockage de l'index vectoriel est facturé tant que l'index existe, que vous effectuiez des recherches sur celui-ci ou non.

Pour supprimer l'index vectoriel tout en conservant le `Products` tableau et ses éléments, utilisez`UpdateTable`. Les éléments restent dans le tableau et seul l'index est supprimé.

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

Pour supprimer le tableau et son index vectoriel en même temps, supprimez le tableau.

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

Vérifiez que la table a disparu. La commande suivante renvoie un une `ResourceNotFoundException` fois la suppression terminée.

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

Pour plus d'informations sur la suppression d'un index vectoriel d'une table que vous souhaitez conserver, consultez[Suppression d’un index vectoriel](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Delete).

## Étapes suivantes
<a name="VectorSearchTutorial.NextSteps"></a>

Après avoir effectué cette recherche vectorielle de base, explorez ces sujets connexes.
+ Filtrer les résultats de recherche à l'aide d'une clé de partition d'index vectoriel et de filtres intégrés — voir[Recherche de base](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Search.Basic).
+ Meilleures pratiques pour choisir les fonctions de distance, les touches de partition et les dimensions — voir[Meilleures pratiques pour les index vectoriels](VectorSearchBestPractices.md).
+ Surveillance de la capacité et des métriques de l'indice vectoriel — voir[Surveillance de la capacité de l'indice vectoriel](VectorSearchMonitoring.md).