

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Tutorial: Pencarian vektor pertama Anda
<a name="VectorSearchTutorial"></a>

Bayangkan katalog produk di mana pembeli menggambarkan apa yang mereka inginkan dengan kata-kata mereka sendiri alih-alih mencocokkan kata kunci yang tepat. Anda dapat menyimpan penyematan vektor dari setiap deskripsi produk di DynamoDB dan kemudian menanyakan indeks vektor untuk menemukan kecocokan terdekat.

Tutorial ini membuat tabel dengan indeks vektor, menghasilkan penyematan 1024 dimensi dengan Amazon Bedrock Titan Text Embeddings V2, memuat 50 produk, dan menjalankan pencarian kesamaan yang mengembalikan 5 kecocokan terdekat. Setiap perintah dapat ditempelkan langsung ke terminal. Untuk latar belakang tentang cara kerja embedding dengan DynamoDB, lihat. [Menghasilkan penyematan vektor](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Embeddings)

**Tentang skala dan ingatan**  
Indeks vektor produksi menyimpan jutaan hingga miliaran vektor. Indeks vektor menggunakan perkiraan pencarian tetangga terdekat, dan karakteristik ingatan dari pendekatan itu menjadi dapat diamati hanya pada skala yang jauh lebih besar. Perlakukan katalog 50 item di sini sebagai demonstrasi mekanik. Untuk panduan tentang ukuran dan penyetelan, lihat[Praktik terbaik untuk indeks vektor](VectorSearchBestPractices.md).

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

Sebelum Anda mulai, pastikan Anda memiliki yang berikut:
+ AWS CLI versi 2.36.16 atau yang lebih baru. Dukungan indeks vektor ditambahkan ke AWS CLI dan AWS SDK dalam pembaruan model layanan yang dirilis pada 4 Agustus 2026. Versi sebelumnya tidak mengenali `--vector-indexes` parameter atau `search-vectors` perintah. Periksa versi Anda dengan `aws --version` dan tingkatkan jika diperlukan. Jika Anda menggunakan AWS SDK sebagai pengganti AWS CLI, Anda memerlukan `botocore` 1.43.64 atau yang lebih baru, atau rilis setara dari SDK bahasa Anda.
+ Kredensi dengan izin untuk tindakan Dynamo `CreateTable` DB`DescribeTable`,,`PutItem`,`BatchWriteItem`,`Scan`,`SearchVectors`, `UpdateTable``DeleteTable`, dan untuk tindakan Amazon Bedrock. `InvokeModel` `dynamodb:SearchVectors`adalah tindakan baru, jadi kebijakan yang ada yang memberikan akses baca DynamoDB tidak menyertakannya.
+ Akses ke model Titan Text Embeddings V2 diaktifkan di Amazon Bedrock untuk akun dan Wilayah Anda. Akses model Amazon Bedrock diberikan per akun dan per Wilayah, jadi Anda harus mengaktifkan model sebelum dapat memanggilnya.
+ `jq`diinstal untuk membentuk kembali output model ke dalam format DynamoDB.
+ Wilayah di mana indeks vektor DynamoDB dan Amazon Bedrock Titan Text Embeddings V2 tersedia. Ketersediaan model Amazon Bedrock bervariasi menurut Wilayah dan umumnya lebih sempit daripada cakupan Wilayah DynamoDB, jadi konfirmasikan keduanya sebelum Anda memilih Wilayah. Untuk ketersediaan model Amazon Bedrock, lihat [ Dukungan model berdasarkan Wil AWS ayah ](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) di Panduan * Pengguna Amazon Bedrock. *

**Biaya**  
Tutorial ini dikenakan biaya untuk pemanggilan model Amazon Bedrock dan penyimpanan DynamoDB. Itu membuat 51 panggilan penyematan, masing-masing ditagih sebagai permintaan inferensi Amazon Bedrock, pada input kalimat tunggal pendek. Biaya penyimpanan DynamoDB berlaku selama tabel dan indeks vektor ada.

**Konfirmasikan Wilayah mana yang Anda gunakan**  
Setiap perintah dalam tutorial ini harus berjalan di Wilayah yang sama. Konfirmasikan Wilayah yang benar-benar AWS CLI akan digunakan sebelum Anda mulai, karena `AWS_REGION` lebih diutamakan`AWS_DEFAULT_REGION`, dan keduanya diutamakan daripada `region` pengaturan dalam file AWS CLI konfigurasi Anda. Nilai terses `AWS_REGION` at di shell Anda membuat tabel di tempat lain selain Wilayah yang Anda inginkan, dan model Amazon Bedrock mungkin tidak diaktifkan di sana. Untuk menghilangkan semua keraguan, berikan `--region {{region}}` secara eksplisit setiap perintah.

**`SearchVectors`menggunakan titik akhir yang terpisah**  
`SearchVectors`menyelesaikan ke titik akhir pencarian khusus daripada titik akhir DynamoDB standar. Di Wilayah komersial, permintaan masuk ke`search-dynamodb.{{region}}.amazonaws.com`, sementara setiap operasi lain dalam tutorial ini masuk ke`dynamodb.{{region}}.amazonaws.com`. Varian FIPS dan dual-stack mengikuti pola yang sama. Ini memiliki dua konsekuensi:  
Jika jaringan Anda membatasi lalu lintas keluar melalui titik akhir VPC, proxy, atau daftar izin keluar, Anda harus mengizinkan nama host pencarian juga. Jika tidak `CreateTable` dan operasi tulis berhasil dan hanya `SearchVectors` gagal, biasanya dengan kesalahan koneksi yang tidak menunjukkan penyebabnya.
Jangan gunakan `--endpoint-url` untuk mengganti titik akhir DynamoDB untuk perintah ini. Satu penggantian tidak dapat melayani kedua nama host dan akan merusak perutean pencarian.

1. **Buat tabel dengan indeks vektor. ** Ini membuat `Products` tabel dengan indeks vektor bernama `DescriptionIndex` pada `DescriptionVector` atribut. Indeks menggunakan fungsi `COSINE` jarak dengan 1024 dimensi untuk mencocokkan keluaran Titan Text Embeddings V2. Karena tidak ada kunci partisi indeks vektor yang ditentukan, Anda tidak `SearchConditionExpression` perlu mencari.

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

   Contoh ini menggunakan `ProjectionType` `ALL` sehingga setiap atribut tersedia untuk hasil pencarian. Jika Anda menggunakannya sebagai `INCLUDE` gantinya, perhatikan bahwa anggaran atribut non-kunci yang diproyeksikan dibagikan: atribut vektor dihitung sebagai satu atribut, dan setiap elemen skema `INLINE_FILTER` pencarian dihitung sebagai satu. `HASH`elemen skema pencarian tidak dihitung terhadap batas.

1. **Tunggu indeks menjadi aktif. ** Jalankan ini sampai `IndexStatus` sekarang`ACTIVE`.

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

   Untuk indeks yang dibuat sebagai bagian dari`CreateTable`, seperti dalam tutorial `Backfilling` ini, tidak dilaporkan dan perintah kembali `null` untuk itu. Gunakan `IndexStatus` sendiri sebagai sinyal Anda dalam kasus ini.

   `Backfilling`dilaporkan untuk indeks vektor yang Anda tambahkan ke tabel yang ada`UpdateTable`. Dalam hal ini, tunggu sampai `IndexStatus` `ACTIVE` `Backfilling` ada `false` sebelum Anda mengandalkan hasil pencarian yang lengkap.
**Tunggu indeks, bukan hanya tabel**  
Jangan gunakan `aws dynamodb wait table-exists` untuk menggerakkan pencarian. Pelayan itu cocok`Table.TableStatus`, yang menjadi `ACTIVE` sementara indeks vektor masih bisa`CREATING`. Tidak ada pelayan untuk kesiapan indeks vektor, jadi Anda harus melakukan polling `DescribeTable` seperti yang ditunjukkan. Mencari indeks yang belum `ACTIVE` gagal, dan mencari selama pengisian ulang dapat mengembalikan hasil yang tidak lengkap.  
Untuk alasan yang sama, Anda tidak dapat menghapus tabel sampai setiap indeks vektor selesai dibuat. `DeleteTable`kembali `ResourceInUseException` dengan pesan “Tidak dapat menghapus tabel saat indeks sedang dibuat, diperbarui, atau dihapus.”

1. **Buat katalog produk. ** Simpan 50 produk berikut ke file yang dipisahkan tab bernama. `products.tsv` Setiap baris berisi ID produk, nama, dan deskripsi satu kalimat. Katalog berisi sepuluh kelompok lima produk terkait, yang membuat hasil pencarian pada langkah terakhir mudah ditafsirkan.

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

   Pemisah antara tiga bidang harus berupa karakter tab literal. Jika Anda menyalin katalog dari browser, verifikasi bahwa tab bertahan sebelum Anda melanjutkan.

1. **Menghasilkan embedding untuk satu produk. ** Jalankan panggilan penyematan tunggal terlebih dahulu untuk mengonfirmasi bahwa akses model Amazon Bedrock Anda berfungsi. Bid `inputText` ang berisi teks untuk disematkan, `dimensions` menetapkan ukuran keluaran (nilai yang valid adalah 256, 512, atau 1024), dan `normalize` menghasilkan vektor panjang unit, yang direkomendasikan untuk pencarian kesamaan kosinus.

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

   `--cli-binary-format raw-in-base64-out`Bendera diperlukan. AWS CLI v2 default ke pengkodean base64 untuk parameter biner, jadi tanpa tanda ini badan JSON mentah gagal mengirim dengan benar. Tanggapan ditulis ke `emb/p01.json` dan berisi `embedding` array 1024 angka floating-point. Konfirmasikan jumlah dimensi.

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

   Outputnya adalah `1024`.

1. **Tulis produk pertama. ** Ubah penyematan ke dalam format item DynamoDB dan tulis. Atribut vektor yang disimpan menggunakan tipe DynamoDB `L` (list) yang membungkus setiap angka dalam suatu `N` tipe.

   ```
   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
   ```
**Ukuran vektor dan batas item**  
Vektor 1024 dimensi menambahkan sekitar 32 KB ke payload permintaan dan sekitar 5 KB ke item yang disimpan, jauh dalam batas ukuran item DynamoDB 400 KB. Jumlah dimensi adalah pendorong utama ukuran item saat Anda menyimpan penyematan.

1. **Sematkan produk yang tersisa. ** Loop ini menghasilkan penyematan untuk setiap produk yang tersisa. Ini melewatkan file apa pun yang sudah ada, sehingga Anda dapat menjalankannya kembali dengan aman jika panggilan gagal.

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

   Hitungannya harus 50 sebelum Anda melanjutkan. Jika ada panggilan yang dicetak`FAILED`, jalankan loop lagi; itu mencoba lagi hanya file yang hilang.
**InvokeModel kuota tarif**  
Amazon Bedrock menerapkan kuota tarif permintaan ke`InvokeModel`. Jika Anda memodifikasi loop ini untuk mengeluarkan panggilan secara paralel, harapkan pengecualian pembatasan pada beberapa panggilan, dan selalu verifikasi jumlah file akhir daripada mengasumsikan setiap panggilan berhasil. Katalog tertanam sebagian dimuat tanpa kesalahan dan menghasilkan hasil pencarian yang secara diam-diam menghilangkan produk yang hilang.

1. **Muat produk yang tersisa. ** Membangun muatan permintaan masing-masing 25 item, yang merupakan maksimum yang diterima`BatchWriteItem`.

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

   Loop membaca dari pengalihan daripada pipa karena `while` loop pipa berjalan di subshell di beberapa shell, yang membuang `count` nilai `batch` dan dan menghasilkan file batch yang salah format.

   Kirim setiap batch. `BatchWriteItem`sebagian dapat berhasil, jadi kirimkan kembali apa pun yang dikembalikannya. `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
   ```

   Konfirmasikan bahwa semua 50 item hadir.

   ```
   aws dynamodb scan --table-name Products --select COUNT --query 'Count'
   ```
**ItemCount pembaruan tertunda**  
`IndexSizeBytes`Nilai `ItemCount` dan yang `DescribeTable` dilaporkan untuk indeks vektor diperbarui kira-kira setiap enam jam, jadi segera setelah pemuatan mereka masih dapat membaca `0` meskipun setiap item ditulis. Gunakan `Scan` dengan`--select COUNT`, seperti yang ditunjukkan, untuk memverifikasi beban. Jangan memperlakukan nol `ItemCount` sebagai beban yang gagal.

1. **Hasilkan penyisipan kueri dan pencarian. ** Sematkan frasa pencarian dengan model dan jumlah dimensi yang sama yang Anda gunakan untuk item yang disimpan.

   ```
   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 format berbeda dari format vektor yang disimpan**  
Saat Anda menyimpan vektor dalam atribut item, Anda membungkusnya dalam tipe `L` (daftar):`{"L":[{"N":"0.123"},...]}`. Saat Anda meneruskan vektor kueri ke`SearchVectors`, Anda menggunakan array `N` nilai biasa tanpa pem `L` bungkus:`[{"N":"0.123"},...]`. `jq`Transformasi berikut berbeda dari yang Anda gunakan untuk item yang disimpan karena alasan ini. Untuk informasi selengkapnya, lihat [Pencarian dasar](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
   ```

   Vektor kueri dan vektor yang disimpan harus berasal dari model embedding yang sama dan harus memiliki jumlah dimensi yang sama. Menggunakan model atau jumlah dimensi yang berbeda menghasilkan hasil yang tidak berarti atau kesalahan validasi.

1. **Baca hasilnya. ** DynamoDB mengembalikan hasil yang diurutkan berdasarkan kesamaan, dengan item yang paling mirip terlebih dahulu. Setiap hasil berisi `Item` atribut yang diproyeksikan dan 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
       }
   }
   ```

   Skor tergantung pada model penyematan dan teks input yang tepat, sehingga nilai Anda akan sedikit berbeda. Yang penting adalah item mana yang dipilih dan dalam urutan apa. Kueri tidak berisi kata kursi, monitor, atau keyboard, namun pencarian mengembalikan kelima produk meja dan kantor di depan 45 item lainnya dalam katalog. Tidak ada dari kelompok kopi, berkemah, atau hewan peliharaan yang muncul.

   Coba kueri lain untuk melihat perilaku yang sama dengan grup yang berbeda. Ulangi langkah sebelumnya dengan `"Something to brew fresh coffee at home"` dan hasil teratas adalah pembuat espresso, dripper tuangkan di atas, dan buih susu. Ulangi dengan `"Keeping my dog safe on walks"` dan tali dan harness didahulukan, diikuti oleh item yang hanya terkait secara longgar, karena katalog hanya berisi dua produk yang sangat cocok. Kasus terakhir itu perlu diperhatikan: pencarian selalu mengembalikan jumlah item yang Anda minta, bahkan ketika katalog tidak berisi banyak kecocokan yang bagus. Gunakan `Score` nilai, bukan jumlah hasil, untuk menilai kualitas kecocokan.

   Cara membaca skor tergantung pada fungsi jarak yang digunakan indeks:
   + `COSINE`dan `EUCLIDEAN` mengembalikan item dengan skor terkecil, jadi lebih rendah lebih mirip. Skor kosinus berkisar dari 0 untuk arah yang identik hingga 2 untuk arah yang berlawanan.
   + `DOT_PRODUCT`mengembalikan item dengan skor tertinggi, jadi lebih tinggi lebih mirip.

   Indeks ini menggunakan`COSINE`, sehingga hasil pertama memiliki skor terendah. Mencari dengan teks yang identik dengan deskripsi yang disimpan mengembalikan item itu terlebih dahulu dengan skor di atau mendekati nol.

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

Untuk menghindari biaya yang sedang berlangsung, hapus sumber daya yang Anda buat dalam tutorial ini. Penyimpanan indeks vektor ditagih selama indeks ada, terlepas dari apakah Anda menjalankan pencarian terhadapnya atau tidak.

Untuk menghapus indeks vektor tetapi menyimpan `Products` tabel dan itemnya, gunakan`UpdateTable`. Item tetap dalam tabel dan hanya indeks yang dihapus.

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

Untuk menghapus tabel dan indeks vektornya bersama-sama, hapus tabel.

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

Konfirmasikan bahwa meja hilang. Perintah berikut mengembalikan `ResourceNotFoundException` setelah penghapusan selesai.

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

Untuk informasi selengkapnya tentang menghapus indeks vektor dari tabel yang ingin Anda simpan, lihat[Menghapus indeks vektor](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Delete).

## Langkah selanjutnya
<a name="VectorSearchTutorial.NextSteps"></a>

Setelah Anda menyelesaikan pencarian vektor dasar ini, jelajahi topik terkait ini.
+ Memfilter hasil pencarian dengan kunci partisi indeks vektor dan filter sebaris — lihat[Pencarian dasar](VectorSearchWorkingWith.md#VectorSearchWorkingWith.Search.Basic).
+ Praktik terbaik untuk memilih fungsi jarak, tombol partisi, dan dimensi — lihat[Praktik terbaik untuk indeks vektor](VectorSearchBestPractices.md).
+ Pemantauan untuk kapasitas indeks vektor dan metrik — lihat[Memantau kapasitas indeks vektor](VectorSearchMonitoring.md).