

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

# Pencarian vektor
<a name="vector-search"></a>

Pencarian vektor untuk MemoryDB memperluas fungsionalitas MemoryDB. Pencarian vektor dapat digunakan bersama dengan fungsionalitas MemoryDB yang ada. Aplikasi yang tidak menggunakan pencarian vektor tidak terpengaruh oleh keberadaannya. Pencarian vektor tersedia di semua Wilayah yang MemoryDB tersedia.

Pencarian vektor untuk menyederhanakan arsitektur aplikasi Anda sambil memberikan pencarian vektor berkecepatan tinggi. Pencarian vektor untuk MemoryDB sangat ideal untuk kasus penggunaan di mana kinerja puncak dan skala adalah kriteria pemilihan yang paling penting. Anda dapat menggunakan data MemoryDB yang ada, atau Valkey atau Redis OSS API, untuk membangun pembelajaran mesin dan kasus penggunaan AI generatif. Ini termasuk generasi tambahan pengambilan, deteksi anomali, pengambilan dokumen, dan rekomendasi waktu nyata.

Pada 26/6/2024, AWS MemoryDB memberikan kinerja pencarian vektor tercepat dengan tingkat penarikan tertinggi di antara database vektor populer di. AWS

**Topics**
+ [

# Ikhtisar pencarian vektor
](vector-search-overview.md)
+ [

# Kasus penggunaan
](vector-search-examples.md)
+ [

# Fitur pencarian vektor dan batas
](vector-search-limits.md)
+ [

# Buat cluster yang diaktifkan untuk pencarian vektor
](vector-search-cluster.md)
+ [

# Perintah pencarian vektor
](vector-search-commands.md)

# Ikhtisar pencarian vektor
<a name="vector-search-overview"></a>

Pencarian vektor dibangun di atas pembuatan, pemeliharaan, dan penggunaan indeks. Setiap operasi pencarian vektor menentukan indeks tunggal dan operasinya terbatas pada indeks itu, yaitu, operasi pada satu indeks tidak terpengaruh oleh operasi pada indeks lainnya. Kecuali untuk operasi untuk membuat dan menghancurkan indeks, sejumlah operasi dapat dikeluarkan terhadap indeks apa pun kapan saja, yang berarti bahwa pada tingkat cluster, beberapa operasi terhadap beberapa indeks dapat berlangsung secara bersamaan.

Indeks individu diberi nama objek yang ada di namespace unik, yang terpisah dari ruang nama Valkey dan Redis OSS lainnya: kunci, fungsi, dll. Setiap indeks secara konseptual mirip dengan tabel database konvensional karena terstruktur dalam dua dimensi: kolom dan baris. Setiap baris dalam tabel sesuai dengan kunci. Setiap kolom dalam indeks sesuai dengan anggota atau bagian dari kunci itu. Dalam dokumen ini, kunci istilah, baris dan catatan identik dan digunakan secara bergantian. Demikian pula istilah kolom, bidang, jalur dan anggota pada dasarnya identik dan juga digunakan secara bergantian.

Tidak ada perintah khusus untuk menambah, menghapus, atau memodifikasi data yang diindeks. Sebaliknya yang ada **HASH** atau **JSON** perintah yang memodifikasi kunci yang ada dalam indeks juga secara otomatis memperbarui indeks.

**Topics**
+ [

## Indeks dan ruang kunci Valkey dan Redis OSS
](#vector-search-indexes-keyspaces)
+ [

## Jenis bidang indeks
](#vector-search-index-field-types)
+ [

## Algoritma indeks vektor
](#vector-search-index-algorithms)
+ [

## Ekspresi kueri pencarian vektor
](#vector-search-query-expression)
+ [

## Perintah INFO
](#vector-search-ft.info)
+ [

## Keamanan pencarian vektor
](#vector-search-security)

## Indeks dan ruang kunci Valkey dan Redis OSS
<a name="vector-search-indexes-keyspaces"></a>

Indeks dibangun dan dipelihara di atas subset dari ruang kunci Valkey dan Redis OSS. Beberapa indeks dapat memilih subset ruang kunci yang terputus atau tumpang tindih tanpa batasan. Ruang kunci untuk setiap indeks ditentukan oleh daftar awalan kunci yang disediakan saat indeks dibuat. Daftar awalan adalah opsional dan jika dihilangkan, seluruh ruang kunci akan menjadi bagian dari indeks itu. Indeks juga diketik karena hanya mencakup kunci yang memiliki tipe yang cocok. Saat ini, hanya indeks JSON dan HASH yang didukung. Indeks HASH hanya mengindeks kunci HASH yang dicakup oleh daftar awalannya dan juga indeks JSON hanya mengindeks kunci JSON yang dicakup oleh daftar awalannya. Kunci dalam daftar awalan ruang kunci indeks yang tidak memiliki tipe yang ditentukan diabaikan dan tidak memengaruhi operasi pencarian.

Ketika perintah HASH atau JSON memodifikasi kunci yang berada dalam ruang kunci indeks indeks yang diperbarui. Proses ini melibatkan penggalian bidang yang dideklarasikan untuk setiap indeks dan memperbarui indeks dengan nilai baru. Proses pembaruan dilakukan di utas latar belakang, yang berarti bahwa indeks pada akhirnya hanya konsisten dengan konten keyspace mereka. Dengan demikian sisipan atau pembaruan kunci tidak akan terlihat di hasil pencarian untuk waktu yang singkat. Selama periode beban sistem berat mutasi data yang and/or berat, penundaan visibilitas bisa menjadi lebih lama.

Pembuatan indeks adalah proses multi-langkah. Langkah pertama adalah menjalankan perintah [FT.CREATE](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.create.html) yang mendefinisikan indeks. Eksekusi yang berhasil membuat secara otomatis memulai langkah kedua - penimbunan ulang. Proses pengisian ulang berjalan di thread latar belakang dan memindai ruang kunci untuk kunci yang berada dalam daftar awalan indeks baru. Setiap kunci yang ditemukan ditambahkan ke indeks. Akhirnya seluruh keyspace dipindai, menyelesaikan proses pembuatan indeks. Perhatikan bahwa saat proses pengisian ulang berjalan, mutasi kunci yang diindeks diizinkan, tidak ada batasan dan proses pengisian ulang indeks tidak akan selesai sampai semua kunci diindeks dengan benar. Operasi kueri yang dicoba saat indeks sedang menjalani pengisian ulang tidak diizinkan dan diakhiri dengan kesalahan. Penyelesaian proses backfilling dapat ditentukan dari output `FT.INFO` perintah untuk indeks tersebut ('backfill\$1status').

## Jenis bidang indeks
<a name="vector-search-index-field-types"></a>

Setiap bidang (kolom) indeks memiliki jenis tertentu yang dideklarasikan saat indeks dibuat dan lokasi di dalam kunci. Untuk kunci HASH lokasi adalah nama bidang dalam HASH. Untuk kunci JSON lokasi adalah deskripsi jalur JSON. Ketika kunci dimodifikasi, data yang terkait dengan bidang yang dideklarasikan diekstraksi, dikonversi ke tipe yang dideklarasikan dan disimpan dalam indeks. Jika data hilang atau tidak berhasil dikonversi ke tipe yang dideklarasikan, maka bidang tersebut dihilangkan dari indeks. Ada empat jenis bidang, seperti yang dijelaskan sebagai berikut: 
+ **Bidang angka** berisi satu nomor. Untuk bidang JSON, aturan numerik nomor JSON harus diikuti. Untuk HASH, bidang ini diharapkan berisi teks ASCII dari angka yang ditulis dalam format standar untuk nomor tetap atau floating point. Terlepas dari representasi dalam kunci, bidang ini dikonversi ke nomor floating point 64-bit untuk penyimpanan dalam indeks. Bidang angka dapat digunakan dengan operator pencarian rentang. Karena angka yang mendasarinya disimpan di floating point dengan batasan presisi, aturan umum tentang perbandingan numerik untuk nomor floating point berlaku.
+ **Bidang tag** berisi nol atau lebih nilai tag yang dikodekan sebagai string UTF-8 tunggal. String diuraikan menjadi nilai tag menggunakan karakter pemisah (default adalah koma tetapi dapat diganti) dengan spasi putih depan dan belakang dihapus. Sejumlah nilai tag dapat terkandung dalam satu bidang tag. Bidang tag dapat digunakan untuk memfilter kueri untuk kesetaraan nilai tag dengan perbandingan case-sensitive atau case-insensitive.
+ **Bidang teks** berisi gumpalan byte yang tidak perlu sesuai dengan UTF-8. Bidang teks dapat digunakan untuk menghias hasil kueri dengan nilai-nilai yang bermakna aplikasi. Misalnya URL atau isi dokumen, dll.
+ **Bidang vektor** berisi vektor angka yang juga dikenal sebagai embedding. Bidang vektor mendukung K-pencarian tetangga terdekat (KNN) dari vektor berukuran tetap menggunakan algoritma dan metrik jarak tertentu. Untuk indeks HASH, bidang harus berisi seluruh vektor yang dikodekan dalam format biner (IEEE 754 endian *kecil*). Untuk kunci JSON, jalur harus mereferensikan array dengan ukuran yang benar yang diisi dengan angka. Perhatikan bahwa ketika array JSON digunakan sebagai bidang vektor, representasi internal array dalam kunci JSON diubah menjadi format yang diperlukan oleh algoritma yang dipilih, mengurangi konsumsi memori dan presisi. Operasi baca selanjutnya menggunakan perintah JSON akan menghasilkan nilai presisi yang berkurang.

## Algoritma indeks vektor
<a name="vector-search-index-algorithms"></a>

Dua algoritma indeks vektor disediakan:
+ **Flat** — Algoritma Flat adalah pemrosesan linier brute force dari setiap vektor dalam indeks, menghasilkan jawaban yang tepat dalam batas-batas ketepatan perhitungan jarak. Karena pemrosesan linier indeks, waktu berjalan untuk algoritma ini bisa sangat tinggi untuk indeks besar.
+ **HNSW (Hierarchical Navigable Small Worlds)** — Algoritma HNSW adalah alternatif yang memberikan perkiraan jawaban yang benar dengan imbalan waktu eksekusi yang jauh lebih rendah. Algoritma dikendalikan oleh tiga parameter`M`, `EF_CONSTRUCTION` dan`EF_RUNTIME`. Dua parameter pertama ditentukan pada waktu pembuatan indeks dan tidak dapat diubah. `EF_RUNTIME`Parameter memiliki nilai default yang ditentukan pada pembuatan indeks, tetapi dapat diganti pada setiap operasi kueri individu sesudahnya. Ketiga parameter ini berinteraksi untuk menyeimbangkan memori dan konsumsi CPU selama operasi konsumsi dan kueri serta mengontrol kualitas perkiraan pencarian KNN yang tepat (dikenal sebagai rasio recall).

Kedua algoritma pencarian vektor (Flat dan HNSW) mendukung parameter opsional. `INITIAL_CAP` Ketika ditentukan, parameter ini mengalokasikan memori untuk indeks, sehingga mengurangi overhead manajemen memori dan peningkatan tingkat konsumsi vektor.

Algoritma pencarian vektor seperti HNSW mungkin tidak efisien menangani penghapusan atau penimpaan vektor yang dimasukkan sebelumnya. Penggunaan operasi ini dapat mengakibatkan konsumsi memori indeks berlebih and/or menurunkan kualitas penarikan. Pengindeksan ulang adalah salah satu metode untuk memulihkan ingatan penggunaan memori yang optimal. and/or 

## Ekspresi kueri pencarian vektor
<a name="vector-search-query-expression"></a>

Perintah [FT.SEARCH](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.search.html) dan [FT.AGGREGATE memerlukan ekspresi](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.aggregate.html) kueri. Ekspresi ini adalah parameter string tunggal yang terdiri dari satu atau lebih operator. Setiap operator menggunakan satu bidang dalam indeks untuk mengidentifikasi subset kunci dalam indeks. Beberapa operator dapat digabungkan menggunakan penggabung boolean serta tanda kurung untuk lebih meningkatkan atau membatasi kumpulan kunci yang dikumpulkan (atau set hasil).

### Wildcard
<a name="vector-search-query-expression-wildcard"></a>

Operator wildcard, tanda bintang ('\$1'), cocok dengan semua kunci dalam indeks. 

### Rentang numerik
<a name="vector-search-query-expression-numeric-range"></a>

Operator rentang numerik memiliki sintaks berikut:

```
<range-search> ::= '@' <numeric-field-name> ':' '[' <bound> <bound> ']'
<bound>  ::= <number> | '(' <number>
<number> ::= <integer> | <fixed-point> | <floating-point> | 'Inf' | '-Inf' | '+Inf'
```

< numeric-field-name > harus berupa bidang tipe yang dideklarasikan`NUMERIC`. Secara default terikat bersifat inklusif tetapi tanda kurung terbuka terkemuka ['('] dapat digunakan untuk membuat eksklusif terikat. Pencarian rentang dapat diubah menjadi perbandingan relasional tunggal (<, <=, >, >=) dengan menggunakan`Inf`, `+Inf` atau `-Inf` sebagai salah satu batas. Terlepas dari format numerik yang ditentukan (integer, fixed-point, floating-point, infinity) jumlahnya diubah menjadi floating point 64-bit untuk melakukan perbandingan, mengurangi presisi yang sesuai.

**Example Contoh**  

```
@numeric-field:[0 10]                      // 0   <= <value> <= 10
@numeric-field:[(0 10]                     // 0   <  <value> <= 10
@numeric-field:[0 (10]                     // 0   <= <value> <  10
@numeric-field:[(0 (10]                    // 0   <  <value> <  10
@numeric-field:[1.5 (Inf]                  // 1.5 <= value
```

### Bandingkan tag
<a name="vector-search-query-expression-tag-compare"></a>

Operator perbandingan tag memiliki sintaks berikut:

```
<tag-search> ::= '@' <tag-field-name> ':' '{' <tag> [ '|' <tag> ]* '}'
```

Jika salah satu tag di operator cocok dengan salah satu tag di bidang tag catatan, maka catatan tersebut disertakan dalam kumpulan hasil. Bidang yang dirancang oleh `<tag-field-name>` harus berupa bidang indeks yang dideklarasikan dengan tipe`TAG`. Contoh perbandingan tag adalah:

```
@tag-field:{ atag }
@tag-field: { tag1 | tag2 }
```

### Kombinasi Boolean
<a name="vector-search-query-expression-boolean-combinations"></a>

Kumpulan hasil operator numerik atau tag dapat digabungkan menggunakan logika boolean: and/or. Parentheses can be used to group operators and/or ubah urutan evaluasi. Sintaks operator logika boolean adalah:

```
<expression> ::= <phrase> | <phrase> '|' <expression> | '(' <expression> ')'
<phrase> ::= <term> | <term> <phrase>
<term> ::= <range-search> | <tag-search> | '*'
```

Beberapa istilah yang digabungkan menjadi frasa adalah “dan” -ed. Beberapa frasa yang dikombinasikan dengan pipa ('\$1') adalah “atau” -ed.

### Pencarian vektor
<a name="vector-search-query-expression-vector-search"></a>

Indeks vektor mendukung dua metode pencarian yang berbeda: tetangga terdekat dan jangkauan. Pencarian tetangga terdekat menemukan angka, K, dari vektor dalam indeks yang paling dekat dengan vektor (referensi) yang disediakan — ini dalam bahasa sehari-hari disebut KNN untuk tetangga terdekat 'K'. Sintaks untuk pencarian KNN adalah:

```
<vector-knn-search> ::= <expression> '=>[KNN' <k> '@' <vector-field-name> '$' <parameter-name> <modifiers> ']'
<modifiers> ::= [ 'EF_RUNTIME' <integer> ] [ 'AS' <distance-field-name>]
```

Pencarian vektor KNN hanya diterapkan pada vektor yang memenuhi `<expression>` yang dapat berupa kombinasi dari operator yang didefinisikan di atas: wildcard, pencarian rentang, kombinasi and/or boolean pencarian tag daripadanya.
+ `<k>`adalah bilangan bulat yang menentukan jumlah vektor tetangga terdekat yang akan dikembalikan.
+ `<vector-field-name>`harus menentukan bidang tipe yang dideklarasikan`VECTOR`.
+ `<parameter-name>`bidang menentukan salah satu entri untuk `PARAM` tabel perintah `FT.SEARCH` atau`FT.AGGREGATE`. Parameter ini adalah nilai vektor referensi untuk perhitungan jarak. Nilai vektor dikodekan ke dalam `PARAM` nilai dalam format biner *IEEE 754 endian kecil* (sama dikodekan seperti untuk bidang vektor HASH)
+ Untuk indeks vektor tipe HNSW, `EF_RUNTIME` klausa opsional dapat digunakan untuk mengganti nilai default `EF_RUNTIME` parameter yang ditetapkan saat indeks dibuat.
+ Opsional `<distance-field-name>` memberikan nama bidang untuk kumpulan hasil yang berisi jarak yang dihitung antara vektor referensi dan kunci yang terletak.

Pencarian rentang menempatkan semua vektor dalam jarak tertentu (radius) dari vektor referensi. Sintaks untuk pencarian rentang adalah:

```
<vector-range-search> ::= ‘@’ <vector-field-name> ‘:’ ‘[’ ‘VECTOR_RANGE’ ( <radius> | ‘$’ <radius-parameter> )  $<reference-vector-parameter> ‘]’ [ ‘=’ ‘>’ ‘{’ <modifiers> ‘}’ ] 
<modifiers> ::= <modifier> | <modifiers>, <modifier> 
<modifer> ::= [ ‘$yield_distance_as’ ‘:’ <distance-field-name> ] [ ‘$epsilon’ ‘:’ <epsilon-value> ]
```

Di mana:
+ `<vector-field-name>`adalah nama bidang vektor yang akan dicari.
+ `<radius> or $<radius-parameter>`adalah batas jarak numerik untuk pencarian.
+ `$<reference-vector-parameter> `adalah nama parameter yang berisi vektor referensi. Nilai vektor dikodekan ke dalam nilai PARAM dalam format biner IEEE 754 endian kecil (pengkodean yang sama seperti untuk bidang vektor HASH)
+ Opsional `<distance-field-name>` memberikan nama bidang untuk kumpulan hasil yang berisi jarak yang dihitung antara vektor referensi dan setiap tombol.
+ Opsional `<epsilon-value> ` mengontrol batas operasi pencarian, vektor dalam jarak dilalui `<radius> * (1.0 + <epsilon-value>) ` mencari hasil kandidat. Defaultnya adalah .01.

## Perintah INFO
<a name="vector-search-ft.info"></a>

Pencarian vektor menambah perintah Valkey dan Redis OSS [INFO](https://valkey.io/commands/info/) dengan beberapa bagian tambahan statistik dan penghitung. Permintaan untuk mengambil bagian `SEARCH` akan mengambil semua bagian berikut:

### Bagian `search_memory`
<a name="vector-search-ft.info-search-memory"></a>


| Nama | Deskripsi | 
| --- | --- | 
| search\$1used\$1memory\$1bytes | Jumlah byte memori yang dikonsumsi di semua struktur data pencarian | 
| search\$1used\$1memory\$1human | Versi yang dapat dibaca manusia di atas | 

### Bagian `search_index_stats`
<a name="vector-search-ft.info-search_index_stats"></a>


| Nama | Deskripsi | 
| --- | --- | 
| search\$1number\$1of\$1indexes | Jumlah indeks yang dibuat | 
| search\$1num\$1fulltext\$1indexes | Jumlah bidang non-vektor di semua indeks | 
| search\$1num\$1vector\$1indexes | Jumlah bidang vektor di semua indeks | 
| search\$1num\$1hash\$1indexes | Jumlah indeks pada kunci tipe HASH | 
| search\$1num\$1json\$1indexes | Jumlah indeks pada kunci tipe JSON | 
| search\$1total\$1indexed\$1keys | Jumlah total kunci di semua indeks | 
| search\$1total\$1indexed\$1vectors | Jumlah total vektor di semua indeks | 
| search\$1total\$1indexed\$1hash\$1keys | Jumlah total kunci tipe HASH di semua indeks | 
| search\$1total\$1indexed\$1json\$1keys | Jumlah total kunci tipe JSON di semua indeks | 
| search\$1total\$1index\$1size | Byte yang digunakan oleh semua indeks | 
| search\$1total\$1fulltext\$1index\$1size | Byte yang digunakan oleh struktur indeks non-vektor | 
| search\$1total\$1vector\$1index\$1size | Byte yang digunakan oleh struktur indeks vektor | 
| search\$1max\$1index\$1lag\$1ms | Penundaan konsumsi selama pembaruan batch konsumsi terakhir | 

### Bagian `search_ingestion`
<a name="vector-search-ft.info-search_ingestion"></a>


| Nama | Deskripsi | 
| --- | --- | 
| search\$1background\$1indexing\$1status | Status konsumsi. NO\$1ACTIVITYberarti menganggur. Nilai lain menunjukkan ada kunci dalam proses dicerna. | 
| search\$1ingestion\$1dijeda | Kecuali saat memulai ulang, ini harus selalu “tidak”. | 

### Bagian `search_backfill`
<a name="vector-search-ft.info-search_backfill"></a>

**catatan**  
Beberapa bidang yang didokumentasikan di bagian ini hanya terlihat saat pengisian ulang sedang berlangsung.


| Nama | Deskripsi | 
| --- | --- | 
| search\$1num\$1active\$1backfills | Jumlah kegiatan pengurukan saat ini | 
| search\$1backfills\$1dijeda | Kecuali ketika kehabisan ingatan, ini harus selalu “tidak”. | 
| search\$1current\$1backfill\$1progress\$1percentage | % penyelesaian (0-100) dari isi ulang saat ini | 

### Bagian `search_query`
<a name="vector-search-ft.info-search_query"></a>


| Nama | Deskripsi | 
| --- | --- | 
| search\$1num\$1active\$1queries | Jumlah FT.SEARCH dan FT.AGGREGATE perintah yang sedang berlangsung | 

## Keamanan pencarian vektor
<a name="vector-search-security"></a>

Mekanisme keamanan [ACL (Access Control Lists)](https://valkey.io/topics/acl/) untuk kedua perintah dan akses data diperluas untuk mengontrol fasilitas pencarian. Kontrol ACL dari perintah pencarian individual didukung sepenuhnya. Kategori ACL baru,`@search`, disediakan dan banyak kategori yang ada (`@fast`,,, `@read``@write`, dll.) Diperbarui untuk menyertakan perintah baru. Perintah pencarian tidak memodifikasi data kunci, artinya mesin ACL yang ada untuk akses tulis dipertahankan. Aturan akses untuk operasi HASH dan JSON tidak dimodifikasi oleh kehadiran indeks; kontrol akses tingkat kunci normal masih diterapkan pada perintah tersebut.

Perintah pencarian dengan indeks juga memiliki akses mereka dikontrol melalui ACL. Pemeriksaan akses dilakukan pada tingkat seluruh indeks, bukan pada tingkat per-kunci. Ini berarti bahwa akses ke indeks diberikan kepada pengguna hanya jika pengguna tersebut memiliki izin untuk mengakses semua kunci yang mungkin dalam daftar awalan keyspace indeks tersebut. Dengan kata lain, konten sebenarnya dari indeks tidak mengontrol akses. Sebaliknya, itu adalah isi teoritis dari indeks seperti yang didefinisikan oleh daftar awalan yang digunakan untuk pemeriksaan keamanan. Hal ini dapat mudah untuk membuat situasi di mana pengguna telah membaca akses and/or tulis ke kunci tetapi tidak dapat mengakses indeks yang berisi kunci itu. Perhatikan bahwa hanya akses baca ke ruang kunci yang diperlukan untuk membuat atau menggunakan indeks - ada atau tidak adanya akses tulis tidak dipertimbangkan. 

Untuk informasi selengkapnya tentang penggunaan ACLs dengan MemoryDB, lihat [Mengautentikasi pengguna dengan Daftar Kontrol Akses](https://docs.aws.amazon.com/memorydb/latest/devguide/clusters.acls.html) (). ACLs

# Kasus penggunaan
<a name="vector-search-examples"></a>

Berikut ini adalah kasus penggunaan pencarian vektor.

## Retrieval Augmented Generation (RAG)
<a name="vector-search-examples-retrieval-augmented-generation"></a>

Retrieval Augmented Generation (RAG) memanfaatkan pencarian vektor untuk mengambil bagian yang relevan dari kumpulan data yang besar untuk menambah model bahasa besar (LLM). Secara khusus, encoder menyematkan konteks input dan kueri penelusuran ke dalam vektor, kemudian menggunakan perkiraan pencarian tetangga terdekat untuk menemukan bagian yang serupa secara semantik. Bagian yang diambil ini digabungkan dengan konteks asli untuk memberikan informasi tambahan yang relevan ke LLM untuk mengembalikan respons yang lebih akurat kepada pengguna.

![\[Grafik aliran Retrieval Augmented Generation\]](http://docs.aws.amazon.com/id_id/memorydb/latest/devguide/images/RAG.png)


## Cache Semantik Tahan Lama
<a name="vector-search-examples-durable-semantic-cache"></a>

Semantic Caching adalah proses untuk mengurangi biaya komputasi dengan menyimpan hasil sebelumnya dari FM. Dengan menggunakan kembali hasil sebelumnya dari kesimpulan sebelumnya alih-alih mengkomputernya kembali, caching semantik mengurangi jumlah perhitungan yang diperlukan selama inferensi melalui. FMs MemoryDB memungkinkan caching semantik yang tahan lama, yang menghindari hilangnya data dari kesimpulan masa lalu Anda. Ini memungkinkan aplikasi AI generatif Anda merespons dalam milidetik satu digit dengan jawaban dari pertanyaan serupa semantik sebelumnya, sekaligus mengurangi biaya dengan menghindari kesimpulan LLM yang tidak perlu.

![\[Diagram alur kerja yang menunjukkan proses Model Foundation.\]](http://docs.aws.amazon.com/id_id/memorydb/latest/devguide/images/FM.png)

+ **Pencarian semantik** — Jika kueri pelanggan semantik serupa berdasarkan skor kesamaan yang ditentukan dengan pertanyaan sebelumnya, memori buffer FM (MemoryDB) akan mengembalikan jawaban ke pertanyaan sebelumnya di langkah 4 dan tidak akan memanggil FM melalui langkah 3. Ini akan menghindari latensi model pondasi (FM) dan biaya yang dikeluarkan, memberikan pengalaman yang lebih cepat bagi pelanggan.
+ **Kehilangan pencarian semantik** — Jika kueri pelanggan tidak semantik serupa berdasarkan skor kesamaan yang ditentukan dengan kueri sebelumnya, pelanggan akan menghubungi FM untuk memberikan respons kepada pelanggan pada langkah 3a. Respon yang dihasilkan dari FM kemudian akan disimpan sebagai vektor ke dalam MemoryDB untuk kueri future (langkah 3b) untuk meminimalkan biaya FM pada pertanyaan semantik serupa. Dalam alur ini, langkah 4 tidak akan dipanggil karena tidak ada pertanyaan semantik serupa untuk kueri asli. 

## Deteksi penipuan
<a name="vector-search-examples-fraud-detection"></a>

Deteksi penipuan, suatu bentuk deteksi anomali, mewakili transaksi yang valid sebagai vektor sambil membandingkan representasi vektor dari transaksi baru bersih. Penipuan terdeteksi ketika transaksi baru bersih ini memiliki kesamaan rendah dengan vektor yang mewakili data transaksional yang valid. Hal ini memungkinkan penipuan dideteksi dengan memodelkan perilaku normal, daripada mencoba memprediksi setiap kemungkinan kejadian penipuan. MemoryDB memungkinkan organisasi untuk melakukan ini dalam periode throughput tinggi, dengan positif palsu minimal dan latensi milidetik satu digit.

![\[Diagram alur kerja yang menunjukkan proses Deteksi Penipuan.\]](http://docs.aws.amazon.com/id_id/memorydb/latest/devguide/images/fraud-detection.png)


## Kasus penggunaan lainnya
<a name="vector-search-engines"></a>
+ **Mesin rekomendasi** dapat menemukan pengguna produk atau konten serupa dengan mewakili item sebagai vektor. Vektor dibuat dengan menganalisis atribut dan pola. Berdasarkan pola dan atribut pengguna, item baru yang tidak terlihat dapat direkomendasikan kepada pengguna dengan menemukan vektor paling mirip yang telah dinilai secara positif selaras dengan pengguna.
+ **Mesin pencari dokumen** mewakili dokumen teks sebagai vektor angka yang padat, menangkap makna semantik. Pada waktu pencarian, mesin mengubah permintaan pencarian ke vektor dan menemukan dokumen dengan vektor yang paling mirip dengan kueri menggunakan perkiraan pencarian tetangga terdekat. Pendekatan kesamaan vektor ini memungkinkan pencocokan dokumen berdasarkan makna daripada hanya mencocokkan kata kunci.

# Fitur pencarian vektor dan batas
<a name="vector-search-limits"></a>

## Ketersediaan pencarian vektor
<a name="vector-search-availability"></a>

Konfigurasi MemoryDB yang diaktifkan pencarian vektor didukung pada tipe node R6g, R7g, dan T4G dan tersedia di semua Wilayah di mana MemoryDB tersedia. AWS 

Cluster yang ada tidak dapat dimodifikasi untuk mengaktifkan pencarian. Namun, cluster yang mendukung pencarian dapat dibuat dari snapshot cluster dengan penelusuran dinonaktifkan.

## Pembatasan parametrik
<a name="parameter-restrictions"></a>

Tabel berikut menunjukkan batas untuk berbagai item pencarian vektor:


| Item | Nilai maksimum | 
| --- | --- | 
| Jumlah dimensi dalam vektor | 32768 | 
| Jumlah indeks yang dapat dibuat | 10 | 
| Jumlah bidang dalam indeks | 50 | 
| Klausa FT.SEARCH dan FT.AGGREGATE TIMEOUT (milidetik) | 10000 | 
| Jumlah tahapan pipeline dalam perintah FT.AGGREGATE | 32 | 
| Jumlah bidang dalam klausa FT.AGGREGATE LOAD | 1024 | 
| Jumlah bidang dalam klausa FT.AGGREGATE GROUPBY | 16 | 
| Jumlah bidang dalam klausa FT.AGGREGATE SORTBY | 16 | 
| Jumlah parameter dalam klausa FT.AGGREGATE PARAM | 32 | 
| Parameter HNSW M | 512 | 
| Parameter HNSW EF\$1CONSTRUCTION | 4096 | 
| Parameter HNSW EF\$1RUNTIME | 4096 | 

## Batas penskalaan
<a name="scaling-restrictions"></a>

Pencarian vektor untuk MemoryDB saat ini terbatas pada pecahan tunggal dan penskalaan horizontal tidak didukung. Pencarian vektor mendukung penskalaan vertikal dan replika.

## Pembatasan operasional
<a name="operational-restrictions"></a>

**Indeks Persistensi dan Penimbunan Ulang**

Fitur pencarian vektor mempertahankan definisi indeks, dan isi indeks. Ini berarti bahwa selama permintaan operasional atau peristiwa apa pun yang menyebabkan node memulai atau memulai ulang, definisi indeks dan konten dipulihkan dari snapshot terbaru dan setiap transaksi yang tertunda dibaca dari log transaksi Multi-AZ. Tidak ada tindakan pengguna yang diperlukan untuk memulai ini. Pembangunan kembali dilakukan sebagai operasi pengurukan segera setelah data dipulihkan. Ini secara fungsional setara dengan sistem yang secara otomatis menjalankan perintah [FT.CREATE](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.create.html) untuk setiap indeks yang ditentukan. Perhatikan bahwa node menjadi tersedia untuk operasi aplikasi segera setelah data dipulihkan tetapi kemungkinan sebelum pengurukan indeks selesai, yang berarti bahwa isi ulang akan kembali terlihat oleh aplikasi, misalnya, perintah pencarian menggunakan indeks backfilling dapat ditolak. Untuk informasi lebih lanjut tentang penimbunan ulang, lihat[Ikhtisar pencarian vektorIndeks dan ruang kunci Valkey dan Redis OSS](vector-search-overview.md#vector-search-indexes-keyspaces).

Penyelesaian isi ulang indeks tidak disinkronkan antara primer dan replika. Kurangnya sinkronisasi ini secara tak terduga dapat terlihat oleh aplikasi dan oleh karena itu disarankan agar aplikasi memverifikasi penyelesaian pengisian ulang pada primer dan semua replika sebelum memulai operasi pencarian.

## Snapshot import/export dan Migrasi Langsung
<a name="snapshot-restrictions"></a>

Kehadiran indeks pencarian dalam file RDB membatasi transportabilitas yang kompatibel dari data tersebut. Format indeks vektor yang ditentukan oleh fungsionalitas pencarian vektor MemoryDB hanya dipahami oleh cluster yang diaktifkan vektor MemoryDB lainnya. Selain itu, file RDB dari kluster pratinjau dapat diimpor oleh klaster MemoryDB versi GA, yang akan membangun kembali konten indeks saat memuat file RDB. 

Namun, file RDB yang tidak mengandung indeks tidak dibatasi dengan cara ini. Dengan demikian data dalam klaster pratinjau dapat diekspor ke kluster non-pratinjau dengan menghapus indeks sebelum ekspor.

## Konsumsi memori
<a name="memory-consumption"></a>

 Konsumsi memori didasarkan pada jumlah vektor, jumlah dimensi, nilai-M, dan jumlah data non-vektor, seperti metadata yang terkait dengan vektor atau data lain yang disimpan dalam instance. 

Total memori yang dibutuhkan adalah kombinasi dari ruang yang dibutuhkan untuk data vektor aktual, dan ruang yang diperlukan untuk indeks vektor. Ruang yang diperlukan untuk data Vektor dihitung dengan mengukur kapasitas aktual yang diperlukan untuk menyimpan vektor dalam struktur data HASH atau JSON dan overhead ke pelat memori terdekat, untuk alokasi memori yang optimal. Setiap indeks vektor menggunakan referensi ke data vektor yang disimpan dalam struktur data ini, dan menggunakan pengoptimalan memori yang efisien untuk menghapus salinan duplikat data vektor dalam indeks.

Jumlah vektor tergantung pada bagaimana Anda memutuskan untuk mewakili data Anda sebagai vektor. Misalnya, Anda dapat memilih untuk mewakili satu dokumen menjadi beberapa potongan, di mana setiap potongan mewakili vektor. Atau, Anda dapat memilih untuk mewakili seluruh dokumen sebagai vektor tunggal. 

Jumlah dimensi vektor Anda tergantung pada model penyematan yang Anda pilih. Misalnya, jika Anda memilih untuk menggunakan model embedding [AWS Titan](https://aws.amazon.com/bedrock/titan/) maka jumlah dimensi akan menjadi 1536. 

Parameter M mewakili jumlah tautan dua arah yang dibuat untuk setiap elemen baru selama konstruksi indeks. MemoryDB default nilai ini ke 16; Namun, Anda dapat mengganti ini. Parameter M yang lebih tinggi bekerja lebih baik untuk persyaratan penarikan and/or tinggi dimensi tinggi sementara parameter M rendah bekerja lebih baik untuk persyaratan penarikan rendah dimensi and/or rendah. Nilai M meningkatkan konsumsi memori karena indeks menjadi lebih besar, meningkatkan konsumsi memori. 

Dalam pengalaman konsol, MemoryDB menawarkan cara mudah untuk memilih jenis instans yang tepat berdasarkan karakteristik beban kerja vektor Anda setelah memeriksa Aktifkan pencarian vektor di bawah pengaturan cluster. 

![\[Pengaturan cluster pencarian vektor di AWS konsol.\]](http://docs.aws.amazon.com/id_id/memorydb/latest/devguide/images/vector-search-cluster-settings-console.png)




**Contoh beban kerja**

Seorang pelanggan ingin membangun mesin pencari semantik yang dibangun di atas dokumen keuangan internal mereka. Mereka saat ini memegang 1M dokumen keuangan yang dipotong menjadi 10 vektor per dokumen menggunakan model embedding titan dengan 1536 dimensi dan tidak memiliki data non-vektor. Pelanggan memutuskan untuk menggunakan default 16 sebagai parameter M. 
+ Vektor: 1 M \$1 10 potongan = 10M vektor
+ Dimensi: 1536
+ Data Non-Vektor (GB): 0 GB
+ Parameter M: 16

Dengan data ini, pelanggan dapat mengklik tombol Gunakan kalkulator vektor di dalam konsol untuk mendapatkan jenis instans yang direkomendasikan berdasarkan parameternya:

![\[Kalkulator vektor merekomendasikan jenis simpul, berdasarkan masukan ke kalkulator.\]](http://docs.aws.amazon.com/id_id/memorydb/latest/devguide/images/vector-calc1.png)


![\[Kalkulator vektor dengan nilai yang dimasukkan.\]](http://docs.aws.amazon.com/id_id/memorydb/latest/devguide/images/vector-calc2.png)


Dalam contoh ini, kalkulator vektor akan mencari [jenis node r7g MemoryDB](https://aws.amazon.com/memorydb/pricing/) terkecil yang dapat menampung memori yang diperlukan untuk menyimpan vektor berdasarkan parameter yang disediakan. Perhatikan bahwa ini adalah perkiraan, dan Anda harus menguji jenis instance untuk memastikannya sesuai dengan kebutuhan Anda.



Berdasarkan metode perhitungan di atas dan parameter dalam beban kerja sampel, data vektor ini akan membutuhkan 104,9 GB untuk menyimpan data dan indeks tunggal. Dalam hal ini, jenis `db.r7g.4xlarge` instance akan direkomendasikan karena memiliki 105,81 GB memori yang dapat digunakan. Tipe node terkecil berikutnya akan terlalu kecil untuk menahan beban kerja vektor.

Karena masing-masing indeks vektor menggunakan referensi ke data vektor yang disimpan dan tidak membuat salinan tambahan dari data vektor dalam indeks vektor, indeks juga akan mengkonsumsi ruang yang relatif lebih sedikit. Ini sangat berguna dalam membuat beberapa indeks, dan juga dalam situasi di mana bagian dari data vektor telah dihapus dan merekonstruksi grafik HNSW akan membantu menciptakan koneksi node yang optimal untuk hasil pencarian vektor berkualitas tinggi.

## Keluar dari Memori saat mengisi ulang
<a name="out-of-memory-backfill"></a>

Mirip dengan operasi penulisan Valkey dan Redis OSS, isi ulang indeks dikenakan batasan. out-of-memory Jika memori mesin terisi saat pengisian ulang sedang berlangsung, semua isi ulang dijeda. Jika memori tersedia, proses pengurukan dilanjutkan. Dimungkinkan juga untuk menghapus dan mengindeks saat pengisian ulang dijeda karena kehabisan memori.

## Transaksi
<a name="transactions"></a>

Perintah`FT.CREATE`,`FT.DROPINDEX`,`FT.ALIASADD`,`FT.ALIASDEL`, dan `FT.ALIASUPDATE` tidak dapat dieksekusi dalam konteks transaksional, yaitu, tidak di dalam MULTI/EXEC blok atau dalam LUA atau skrip FUNGSI. 

# Buat cluster yang diaktifkan untuk pencarian vektor
<a name="vector-search-cluster"></a>

Anda dapat membuat cluster yang diaktifkan untuk pencarian vektor dengan menggunakan Konsol Manajemen AWS, atau file AWS Command Line Interface. Bergantung pada pendekatannya, pertimbangan untuk mengaktifkan pencarian vektor harus diaktifkan.

## Menggunakan Konsol Manajemen AWS
<a name="vector-search-console"></a>

Untuk membuat cluster yang diaktifkan untuk pencarian vektor di dalam konsol, Anda perlu mengaktifkan pencarian vektor di bawah pengaturan **Cluster**. Pencarian vektor tersedia untuk MemoryDB versi 7.1 dalam konfigurasi pecahan tunggal.

![\[Melihat pengaturan cluster dengan opsi “Aktifkan pencarian vektor” dicentang memberikan informasi tentang versi tertentu dan dukungan konfigurasi.\]](http://docs.aws.amazon.com/id_id/memorydb/latest/devguide/images/vs-2.png)


Untuk informasi lebih lanjut tentang menggunakan pencarian vektor dengan Konsol Manajemen AWS, lihat[Membuat cluster (Konsol)](getting-started.md#clusters.createclusters.viewdetails.cluster).

## Menggunakan AWS Command Line Interface
<a name="vector-search-cli"></a>

Untuk membuat klaster MemoryDB yang diaktifkan pencarian vektor, Anda dapat menggunakan perintah [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/memorydb/create-cluster.html) MemoryDB dengan meneruskan grup parameter yang tidak dapat diubah untuk mengaktifkan kemampuan pencarian vektor. `default.memorydb-redis7.search`

```
aws memorydb create-cluster \
  --cluster-name <value> \
  --node-type <value> \
  --engine redis \
  --engine-version 7.1 \
  --num-shards 1 \
  --acl-name <value> \
  --parameter-group-name default.memorydb-redis7.search
```

Secara opsional, Anda juga dapat membuat grup parameter baru untuk mengaktifkan pencarian vektor seperti yang ditunjukkan pada contoh berikut. Anda dapat mempelajari lebih lanjut tentang grup parameter [di sini](parametergroups.management.md).

```
aws memorydb create-parameter-group \
  --parameter-group-name my-search-parameter-group \
  --family memorydb_redis7
```

Selanjutnya, perbarui parameter yang diaktifkan pencarian ke ya di grup parameter yang baru dibuat.

```
aws memorydb update-parameter-group \
  --parameter-group-name my-search-parameter-group \
  --parameter-name-values "ParameterName=search-enabled,ParameterValue=yes"
```

Anda sekarang dapat menggunakan grup parameter kustom ini alih-alih grup parameter default untuk mengaktifkan pencarian vektor pada cluster MemoryDB Anda.

# Perintah pencarian vektor
<a name="vector-search-commands"></a>

Berikut ini adalah daftar perintah yang didukung untuk pencarian vektor. 

**Topics**
+ [

# FT.CREATE
](vector-search-commands-ft.create.md)
+ [

# FT.SEARCH
](vector-search-commands-ft.search.md)
+ [

# FT.AGREGAT
](vector-search-commands-ft.aggregate.md)
+ [

# FT.DROPINDEX
](vector-search-commands-ft.dropindex.md)
+ [

# FT.INFO
](vector-search-commands-ft.info.md)
+ [

# KAKI. \$1DAFTAR
](vector-search-commands-ft.list.md)
+ [

# FT.ALIASADD
](vector-search-commands-ft.aliasadd.md)
+ [

# FT.ALIASDEL
](vector-search-commands-ft.aliasdel.md)
+ [

# FT.ALIASUPDATE
](vector-search-commands-ft.aliasupdate.md)
+ [

# KAKI. \$1ALIASLIST
](vector-search-commands-ft.aliaslist.md)
+ [

# FT.PROFIL
](vector-search-commands-ft.profile.md)
+ [

# FT.JELASKAN
](vector-search-commands-ft.explain.md)
+ [

# FT.EXPLAINCLI
](vector-search-commands-ft.explain-cli.md)

# FT.CREATE
<a name="vector-search-commands-ft.create"></a>

 Membuat indeks dan memulai pengurukan indeks itu. Untuk informasi selengkapnya, lihat [Ikhtisar pencarian vektor](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html) untuk detail tentang konstruksi indeks.

**Sintaksis**

```
FT.CREATE <index-name>
ON HASH | JSON
[PREFIX <count> <prefix1> [<prefix2>...]]
SCHEMA 
(<field-identifier> [AS <alias>] 
  NUMERIC 
| TAG [SEPARATOR <sep>] [CASESENSITIVE] 
| TEXT
| VECTOR [HNSW|FLAT] <attr_count> [<attribute_name> <attribute_value>])

)+
```

**Skema**
+ Pengidentifikasi bidang:
  + Untuk kunci hash, pengenal bidang adalah nama bidang.
  + Untuk kunci JSON, pengenal bidang adalah jalur JSON.

  Untuk informasi selengkapnya, lihat [Jenis bidang indeks](vector-search-overview.md#vector-search-index-field-types).
+ Jenis bidang:
  + TAG: Untuk informasi selengkapnya, lihat [Tag](https://redis.io/docs/interact/search-and-query/advanced-concepts/tags/).
  + NUMERIK: Bidang berisi angka.
  + TEXT: Bidang berisi gumpalan data.
  + VECTOR: bidang vektor yang mendukung pencarian vektor.
    + Algoritma — dapat berupa HNSW (Hierarchical Navigable Small World) atau FLAT (brute force). 
    + `attr_count`— jumlah atribut yang akan diteruskan sebagai konfigurasi algoritma, ini termasuk nama dan nilai. 
    + `{attribute_name} {attribute_value}`— key/value pasangan khusus algoritme yang menentukan konfigurasi indeks. 

      Untuk algoritma FLAT, atributnya adalah:

      Diperlukan:
      + DIM — Jumlah dimensi dalam vektor.
      + DISTANCE\$1METRIC — Bisa menjadi salah satu [L2 \$1 IP \$1 COSINE].
      + JENIS - Jenis vektor. Satu-satunya jenis yang didukung adalah`FLOAT32`.

      Opsional:
      + INITIAL\$1CAP — Kapasitas vektor awal dalam indeks yang mempengaruhi ukuran alokasi memori indeks.

      Untuk algoritma HNSW, atributnya adalah:

      Diperlukan:
      + JENIS - Jenis vektor. Satu-satunya jenis yang didukung adalah`FLOAT32`.
      + DIM — Dimensi vektor, ditentukan sebagai bilangan bulat positif. Maksimal: 32768
      + DISTANCE\$1METRIC — Bisa menjadi salah satu [L2 \$1 IP \$1 COSINE].

      Opsional:
      + INITIAL\$1CAP — Kapasitas vektor awal dalam indeks yang mempengaruhi ukuran alokasi memori indeks. Default ke 1024.
      + M — Jumlah tepi keluar maksimum yang diizinkan untuk setiap node dalam grafik di setiap lapisan. pada lapisan nol jumlah maksimal tepi keluar adalah 2M. Defaultnya adalah 16 Maksimum adalah 512.
      + EF\$1CONSTRUCTION — mengontrol jumlah vektor yang diperiksa selama konstruksi indeks. Nilai yang lebih tinggi untuk parameter ini akan meningkatkan rasio penarikan dengan mengorbankan waktu pembuatan indeks yang lebih lama. Nilai default adalah 200. Nilai maksimum adalah 4096.
      + EF\$1RUNTIME — mengontrol jumlah vektor yang diperiksa selama operasi kueri. Nilai yang lebih tinggi untuk parameter ini dapat menghasilkan penarikan yang lebih baik dengan mengorbankan waktu kueri yang lebih lama. Nilai parameter ini dapat diganti berdasarkan per-query. Nilai default adalah 10. Nilai maksimum adalah 4096.

**Nilai yang ditampilkan**

Mengembalikan string pesan OK sederhana atau balasan kesalahan.

**Contoh**

**catatan**  
Contoh berikut menggunakan argumen asli [valkey-cli](https://valkey.io/topics/cli/), seperti de-quoting dan de-escaping data, sebelum mengirimnya ke Valkey atau Redis OSS. Untuk menggunakan klien bahasa pemrograman lainnya (Python, Ruby, C \$1, dll.), Ikuti aturan penanganan lingkungan tersebut untuk menangani string dan data biner. Untuk informasi selengkapnya tentang klien yang didukung, lihat [Alat untuk Dibangun AWS](https://aws.amazon.com/developer/tools/)

**Example 1: Buat beberapa indeks**  
Buat indeks untuk vektor ukuran 2  

```
FT.CREATE hash_idx1 ON HASH PREFIX 1 hash: SCHEMA vec AS VEC VECTOR HNSW 6 DIM 2 TYPE FLOAT32 DISTANCE_METRIC L2
OK
```
Buat indeks JSON 6 dimensi menggunakan algoritma HNSW:  

```
FT.CREATE json_idx1 ON JSON PREFIX 1 json: SCHEMA $.vec AS VEC VECTOR HNSW 6 DIM 6 TYPE FLOAT32 DISTANCE_METRIC L2
OK
```

**Example Contoh 2: Mengisi beberapa data**  
Perintah berikut diformat sehingga dapat dieksekusi sebagai argumen untuk program terminal redis-cli. Pengembang yang menggunakan klien bahasa pemrograman (seperti Python, Ruby, C \$1, dll.) Perlu mengikuti aturan penanganan lingkungan mereka untuk menangani string dan data biner.  
Membuat beberapa data hash dan json:  

```
HSET hash:0 vec "\x00\x00\x00\x00\x00\x00\x00\x00"
HSET hash:1 vec "\x00\x00\x00\x00\x00\x00\x80\xbf"
JSON.SET json:0 . '{"vec":[1,2,3,4,5,6]}'
JSON.SET json:1 . '{"vec":[10,20,30,40,50,60]}'
JSON.SET json:2 . '{"vec":[1.1,1.2,1.3,1.4,1.5,1.6]}'
```
Perhatikan hal-hal berikut:  
+ Kunci data hash dan JSON memiliki awalan definisi indeksnya.
+ Vektor berada pada jalur yang sesuai dari definisi indeks.
+ Vektor hash dimasukkan sebagai data hex sedangkan data JSON dimasukkan sebagai angka.
+ Vektor adalah panjang yang sesuai, entri vektor hash dua dimensi memiliki data hex senilai dua float, entri vektor json enam dimensi memiliki enam angka.

**Example Contoh 3: Hapus dan buat ulang indeks**  

```
FT.DROPINDEX json_idx1
OK

FT.CREATE json_idx1 ON JSON PREFIX 1 json: SCHEMA $.vec AS VEC VECTOR FLAT 6 DIM 6 TYPE FLOAT32 DISTANCE_METRIC L2
OK
```
Perhatikan indeks JSON baru menggunakan `FLAT` algoritma bukan `HNSW` algoritma. Perhatikan juga bahwa itu akan mengindeks ulang data JSON yang ada:  

```
FT.SEARCH json_idx1 "*=>[KNN 100 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2
1) (integer) 3
2) "json:2"
3) 1) "__VEC_score"
   2) "11.11"
   3) "$"
   4) "[{\"vec\":[1.1, 1.2, 1.3, 1.4, 1.5, 1.6]}]"
4) "json:0"
5) 1) "__VEC_score"
   2) "91"
   3) "$"
   4) "[{\"vec\":[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]}]"
6) "json:1"
7) 1) "__VEC_score"
   2) "9100"
   3) "$"
   4) "[{\"vec\":[10.0, 20.0, 30.0, 40.0, 50.0, 60.0]}]"
```

# FT.SEARCH
<a name="vector-search-commands-ft.search"></a>

Menggunakan ekspresi kueri yang disediakan untuk menemukan kunci dalam indeks. Setelah ditemukan, and/or isi hitungan bidang yang diindeks dalam kunci tersebut dapat dikembalikan. Untuk informasi selengkapnya, lihat [Ekspresi kueri penelusuran vektor](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html#vector-search-query-expression).

Untuk membuat data untuk digunakan dalam contoh ini, lihat perintah [FT.CREATE](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.create.html).

**Sintaksis**

```
FT.SEARCH <index-name> <query>
[RETURN <token_count> (<field-identifier> [AS <alias>])+]
[TIMEOUT timeout] 
[PARAMS <count> <name> <value> [<name> <value>]]
[LIMIT <offset> <count>]
[COUNT]
```
+ RETURN: Klausa ini mengidentifikasi bidang kunci mana yang dikembalikan. Klausa AS opsional pada setiap bidang mengesampingkan nama bidang dalam hasil. Hanya bidang yang telah dideklarasikan untuk indeks ini yang dapat ditentukan.
+ LIMIT <offset><count>:: Klausa ini memberikan kemampuan pagination karena hanya kunci yang memenuhi nilai offset dan count yang dikembalikan. Jika klausa ini dihilangkan, defaultnya adalah “LIMIT 0 10", yaitu, hanya maksimal 10 kunci yang akan dikembalikan. 
+ PARAMS: Dua kali jumlah pasangan nilai kunci. key/value Pasangan param dapat direferensikan dari dalam ekspresi kueri. Untuk informasi selengkapnya, lihat [Ekspresi kueri penelusuran vektor](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html#vector-search-query-expression).
+ COUNT: Klausa ini menekan pengembalian isi kunci, hanya jumlah kunci yang dikembalikan. Ini adalah alias untuk “LIMIT 0 0".

**Nilai yang ditampilkan**

Mengembalikan array atau balasan kesalahan.
+ Jika operasi selesai dengan sukses, ia mengembalikan array. Elemen pertama adalah jumlah total kunci yang cocok dengan query. Elemen yang tersisa adalah pasangan nama kunci dan daftar bidang. Daftar bidang adalah array lain yang terdiri dari pasangan nama bidang dan nilai. 
+ Jika indeks sedang dalam proses diisi kembali, perintah segera mengembalikan balasan kesalahan.
+ Jika batas waktu tercapai, perintah mengembalikan balasan kesalahan.

**Contoh: Lakukan beberapa pencarian**

**catatan**  
Contoh berikut menggunakan argumen asli [valkey-cli](https://valkey.io/topics/cli/), seperti de-quoting dan de-escaping data, sebelum mengirimnya ke Valkey atau Redis OSS. Untuk menggunakan klien bahasa pemrograman lainnya (Python, Ruby, C \$1, dll.), Ikuti aturan penanganan lingkungan tersebut untuk menangani string dan data biner. Untuk informasi selengkapnya tentang klien yang didukung, lihat [Alat untuk Dibangun AWS](https://aws.amazon.com/developer/tools/)

**Pencarian hash**

```
FT.SEARCH hash_idx1 "*=>[KNN 2 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2
1) (integer) 2
2) "hash:0"
3) 1) "__VEC_score"
   2) "0"
   3) "vec"
   4) "\x00\x00\x00\x00\x00\x00\x00\x00"
4) "hash:1"
5) 1) "__VEC_score"
   2) "1"
   3) "vec"
   4) "\x00\x00\x00\x00\x00\x00\x80\xbf"
```

Ini menghasilkan dua hasil, diurutkan berdasarkan skornya, yaitu jarak dari vektor kueri (dimasukkan sebagai hex).

**Pencarian JSON**

```
FT.SEARCH json_idx1 "*=>[KNN 2 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2
1) (integer) 2
2) "json:2"
3) 1) "__VEC_score"
   2) "11.11"
   3) "$"
   4) "[{\"vec\":[1.1, 1.2, 1.3, 1.4, 1.5, 1.6]}]"
4) "json:0"
5) 1) "__VEC_score"
   2) "91"
   3) "$"
   4) "[{\"vec\":[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]}]"
```

Ini menghasilkan dua hasil terdekat, diurutkan berdasarkan skornya, dan perhatikan bahwa nilai vektor JSON dikonversi menjadi float dan vektor kueri masih merupakan data vektor. Perhatikan juga bahwa karena `KNN` parameternya 2, hanya ada dua hasil. Nilai yang lebih besar akan mengembalikan lebih banyak hasil:

```
FT.SEARCH json_idx1 "*=>[KNN 100 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2
1) (integer) 3
2) "json:2"
3) 1) "__VEC_score"
   2) "11.11"
   3) "$"
   4) "[{\"vec\":[1.1, 1.2, 1.3, 1.4, 1.5, 1.6]}]"
4) "json:0"
5) 1) "__VEC_score"
   2) "91"
   3) "$"
   4) "[{\"vec\":[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]}]"
6) "json:1"
7) 1) "__VEC_score"
   2) "9100"
   3) "$"
   4) "[{\"vec\":[10.0, 20.0, 30.0, 40.0, 50.0, 60.0]}]"
```

# FT.AGREGAT
<a name="vector-search-commands-ft.aggregate"></a>

Sebuah superset dari perintah FT.SEARCH, memungkinkan pemrosesan tambahan substansif dari kunci yang dipilih oleh ekspresi kueri.

**Sintaksis**

```
FT.AGGREGATE index query
  [LOAD * | [count field [field ...]]]
  [TIMEOUT timeout]
  [PARAMS count name value [name value ...]]
  [FILTER expression]
  [LIMIT offset num]  
  [GROUPBY count property [property ...] [REDUCE function count arg [arg ...] [AS name] [REDUCE function count arg [arg ...] [AS name] ...]] ...]] 
  [SORTBY count [ property ASC | DESC [property ASC | DESC ...]] [MAX num]] 
  [APPLY expression AS name]
```
+ Klausa FILTER, LIMIT, GROUPBY, SORTBY, dan APPLY dapat diulang beberapa kali dalam urutan apa pun dan dicampur secara bebas. Mereka diterapkan dalam urutan yang ditentukan dengan output dari satu klausa yang memberi masukan dari klausa berikutnya.
+ Dalam sintaks di atas, “properti” adalah bidang yang dideklarasikan dalam perintah [FT.CREATE](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.create.html) untuk indeks ini ATAU output dari klausa APPLY sebelumnya atau fungsi REDUCE.
+ Klausa LOAD dibatasi untuk memuat bidang yang telah dideklarasikan dalam indeks. “LOAD\$1” akan memuat semua bidang yang dideklarasikan dalam indeks. 
+ Fungsi peredam berikut didukung: COUNT, COUNT\$1DISTINCTISH, SUM, MIN, MAX, AVG, STDDEV, QUANTILE, TOLIST, FIRST\$1VALUE, dan RANDOM\$1SAMPLE. Untuk informasi selengkapnya, lihat [Agregasi](https://redis.io/docs/interact/search-and-query/search/aggregations/)
+ BATAS <offset><count>: Mempertahankan catatan mulai <offset>dan berlanjut hingga<count>, semua catatan lainnya dibuang.
+ PARAMS: Dua kali jumlah pasangan nilai kunci. key/value Pasangan param dapat direferensikan dari dalam ekspresi kueri.

**Nilai yang ditampilkan**

Mengembalikan array atau balasan kesalahan.
+ Jika operasi selesai dengan sukses, ia mengembalikan array. Elemen pertama adalah bilangan bulat tanpa arti tertentu (harus diabaikan). Elemen yang tersisa adalah hasil output pada tahap terakhir. Setiap elemen adalah array nama bidang dan pasangan nilai.
+ Jika indeks sedang dalam proses diisi kembali, perintah segera mengembalikan balasan kesalahan.
+ Jika batas waktu tercapai, perintah mengembalikan balasan kesalahan.

# FT.DROPINDEX
<a name="vector-search-commands-ft.dropindex"></a>

Jatuhkan indeks. Definisi indeks dan konten terkait dihapus. Kunci tidak terpengaruh.

**Sintaksis**

```
FT.DROPINDEX <index-name>
```

**Nilai yang ditampilkan**

Mengembalikan string pesan OK sederhana atau balasan kesalahan.

# FT.INFO
<a name="vector-search-commands-ft.info"></a>

**Sintaksis**

```
FT.INFO <index-name>
```

Output dari halaman FT.INFO adalah array pasangan nilai kunci seperti yang dijelaskan dalam tabel berikut:


| Key | Tipe nilai | Deskripsi | 
| --- | --- | --- | 
| index\$1name | string | Nama indeks | 
| creation\$1timestamp | integer | Stempel waktu pembuatan bergaya Unix | 
| key\$1type | string | HASH atau JSON | 
| key\$1prefixes | array string | Awalan kunci untuk indeks ini | 
| ladang | array informasi lapangan | Bidang indeks ini | 
| space\$1usage | integer | Byte memori yang digunakan oleh indeks ini | 
| fullext\$1space\$1usage | integer | Byte memori yang digunakan oleh bidang non-vektor | 
| vector\$1space\$1usage | integer | Byte memori yang digunakan oleh bidang vektor | 
| num\$1docs | integer | Jumlah kunci yang saat ini terdapat dalam indeks | 
| num\$1indexed\$1vectors | integer | Jumlah vektor yang saat ini terdapat dalam indeks | 
| current\$1lag | integer | Penundaan konsumsi terbaru (MilliSeconds) | 
| backfill\$1status | string | Salah satu dari: Selesai, InProgres, Dijeda atau Gagal  | 

Tabel berikut menjelaskan informasi untuk setiap bidang:


| Key | Tipe nilai | Deskripsi | 
| --- | --- | --- | 
| pengenal | string | nama bidang | 
| field\$1name | string | Nama anggota hash atau JSON Path | 
| jenis | string | salah satu dari: Numerik, Tag, Teks atau Vektor | 
| pilihan | string | abaikan | 

Jika bidangnya bertipe Vector, informasi tambahan akan hadir tergantung pada algoritma. 

Untuk algoritma HNSW:


| Key | Tipe nilai | Deskripsi | 
| --- | --- | --- | 
| algoritma | string | HNSW | 
| data\$1type | string | FLOAT32 | 
| distance\$1metric | string | salah satu dari: L2, IP atau Cosine | 
| initial\$1capacity | integer | Ukuran awal indeks bidang vektor | 
| kapasitas saat ini | integer | Ukuran indeks bidang vektor saat ini | 
| maximum\$1edges | integer | Parameter M saat pembuatan | 
| ef\$1konstruksi | integer | Parameter EF\$1CONSTRUCTION saat pembuatan | 
| ef\$1runtime | integer | Parameter EF\$1RUNTIME saat pembuatan | 

Untuk algoritma FLAT:


| Key | Tipe nilai | Deskripsi | 
| --- | --- | --- | 
| algoritma | string | DATAR | 
| data\$1type | string | FLOAT32 | 
| distance\$1metric | string | salah satu dari: L2, IP atau Cosine | 
| initial\$1capacity | integer | Ukuran awal indeks bidang vektor | 
| kapasitas saat ini | integer | Ukuran indeks bidang vektor saat ini | 

# KAKI. \$1DAFTAR
<a name="vector-search-commands-ft.list"></a>

Daftar semua indeks.

**Sintaksis**

```
FT._LIST 
```

**Nilai yang ditampilkan**

Mengembalikan array nama indeks

# FT.ALIASADD
<a name="vector-search-commands-ft.aliasadd"></a>

Tambahkan alias untuk indeks. Nama alias baru dapat digunakan di mana saja yang diperlukan nama indeks.

**Sintaksis**

```
FT.ALIASADD <alias> <index-name> 
```

**Nilai yang ditampilkan**

Mengembalikan string pesan OK sederhana atau balasan kesalahan.

# FT.ALIASDEL
<a name="vector-search-commands-ft.aliasdel"></a>

Hapus alias yang ada untuk indeks.

**Sintaksis**

```
FT.ALIASDEL <alias>
```

**Nilai yang ditampilkan**

Mengembalikan string pesan OK sederhana atau balasan kesalahan.

# FT.ALIASUPDATE
<a name="vector-search-commands-ft.aliasupdate"></a>

Perbarui alias yang ada untuk menunjuk ke indeks fisik yang berbeda. Perintah ini hanya mempengaruhi referensi future ke alias. Operasi yang sedang berlangsung (FT.SEARCH, FT.AGGREGATE) tidak terpengaruh oleh perintah ini.

**Sintaksis**

```
FT.ALIASUPDATE <alias> <index>
```

**Nilai yang ditampilkan**

Mengembalikan string pesan OK sederhana atau balasan kesalahan.

# KAKI. \$1ALIASLIST
<a name="vector-search-commands-ft.aliaslist"></a>

Daftar alias indeks.

**Sintaksis**

```
FT._ALIASLIST
```

**Nilai yang ditampilkan**

Mengembalikan array ukuran jumlah alias saat ini. Setiap elemen dari array adalah pasangan alias-index.

# FT.PROFIL
<a name="vector-search-commands-ft.profile"></a>

Jalankan kueri dan kembalikan informasi profil tentang kueri itu.

**Sintaksis**

```
FT.PROFILE 

<index>
SEARCH | AGGREGATE 
[LIMITED]
QUERY <query ....>
```

**Nilai yang ditampilkan**

Sebuah array dua elemen. Elemen pertama adalah hasil dari `FT.AGGREGATE` perintah `FT.SEARCH` atau yang diprofilkan. Elemen kedua adalah array informasi kinerja dan profil.

# FT.JELASKAN
<a name="vector-search-commands-ft.explain"></a>

Mengurai kueri dan mengembalikan informasi tentang bagaimana kueri itu diurai.

**Sintaksis**

```
FT.EXPLAIN <index> <query>
```

**Nilai yang ditampilkan**

String yang berisi hasil yang diuraikan.

# FT.EXPLAINCLI
<a name="vector-search-commands-ft.explain-cli"></a>

Sama seperti perintah FT.EXPLY kecuali bahwa hasilnya ditampilkan dalam format berbeda yang lebih berguna dengan redis-cli.

**Sintaksis**

```
FT.EXPLAINCLI <index> <query>
```

**Nilai yang ditampilkan**

String yang berisi hasil yang diuraikan.