Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan koleksi pencarian vektor
Dengan jenis koleksi pencarian vektor di OpenSearch Tanpa Server, Anda dapat melakukan penelusuran kesamaan yang dapat diskalakan dan berkinerja tinggi. Anda dapat membangun pengalaman pencarian tambahan pembelajaran mesin (ML) modern dan aplikasi kecerdasan buatan (AI) generatif tanpa mengelola infrastruktur basis data vektor yang mendasarinya.
Kasus penggunaan untuk koleksi pencarian vektor meliputi pencarian gambar, pencarian dokumen, pengambilan musik, rekomendasi produk, pencarian video, pencarian berbasis lokasi, deteksi penipuan, dan deteksi anomali.
Mesin vektor untuk OpenSearch Tanpa Server menggunakan fitur pencarian k-terdekat tetangga (k-NN
Mesin vektor menyediakan metrik jarak seperti jarak Euclidean, kesamaan kosinus, dan kesamaan produk titik, dan dapat menampung 16.000 dimensi. Anda dapat menyimpan bidang dengan berbagai tipe data untuk metadata, seperti angka, Boolean, tanggal, kata kunci, dan geopoint. Anda juga dapat menyimpan bidang dengan teks untuk informasi deskriptif untuk menambahkan lebih banyak konteks ke vektor yang disimpan. Colocating tipe data mengurangi kompleksitas, meningkatkan pemeliharaan, dan menghindari duplikasi data, tantangan kompatibilitas versi, dan masalah lisensi.
NextGen koleksi pencarian vektor
NextGen skala pencarian vektor berdasarkan permintaan berdasarkan beban kerja untuk mengoptimalkan keseimbangan antara biaya dan kinerja. Hanya blok data yang diperlukan untuk melayani permintaan pencarian aktif yang dimuat ke dalam memori, dan pekerja menskalakan secara dinamis berdasarkan memori dan sumber daya CPU yang diperlukan. Ketika koleksi menganggur tanpa permintaan yang sedang berlangsung, baik pengindeksan dan skala pencarian ke nol, memberikan penghematan biaya tambahan. Secara default, NextGen termasuk pengoptimalan bawaan yang meningkatkan penarikan sekaligus mengurangi biaya dan latensi.
-
ID dokumen kustom — ID dokumen kustom didukung dalam NextGen koleksi, sehingga memudahkan pelanggan untuk melakukan pembaruan atau mengindeks dokumen dengan ID yang disediakan pengguna.
-
Indeks kompresi 32x — Semua indeks dibuat dengan teknik kompresi 32x canggih secara default. Anda dapat mengganti tingkat kompresi default dan memilih tingkat kompresi yang didukung: 1x, 2x, 8x, 16x, atau 32x (default).
-
Akselerasi pembuatan indeks — Akselerasi GPU diaktifkan secara default untuk membantu membangun indeks vektor skala besar dengan lebih cepat dan lebih efisien. Ini mengurangi waktu yang dibutuhkan untuk mengindeks data ke dalam indeks vektor, memberikan pengalaman pengindeksan throughput yang tinggi dan penghematan biaya. Sumber daya GPU disediakan hanya jika diperlukan selama operasi pembuatan indeks. Anda dapat mengontrol penggunaan GPU berdasarkan per indeks menggunakan pengaturan
index.knn.remote_index_build.enabled. Untuk informasi selengkapnya, lihat GPU-percepatan untuk pengindeksan vektor. -
API Sederhana — koleksi pencarian NextGen vektor tidak memerlukan
modeparameterenginedan dalam pemetaan indeks. Sistem secara otomatis menentukan konfigurasi optimal secara internal, mengurangi kompleksitas pembuatan indeks. -
Respons pencarian yang dioptimalkan — Secara default, respons pencarian dalam koleksi NextGen vektor mengecualikan vektor asli dari hasil. Ini mengurangi latensi pencarian ujung ke ujung dan ukuran payload respons. Untuk memasukkan vektor dalam respons pencarian, lihatAmbil dokumen lengkap dengan vektor.
-
NextGen koleksi vektor memiliki latensi baca-setelah-tulis (
refresh_interval) 10 detik.
Memulai dengan koleksi pencarian vektor
Dalam tutorial ini, Anda menyelesaikan langkah-langkah berikut untuk menyimpan, mencari, dan mengambil embeddings vektor secara real time:
Langkah 1: Konfigurasikan izin
Untuk menyelesaikan tutorial ini (dan menggunakan OpenSearch Tanpa Server secara umum), Anda harus memiliki izin AWS Identity and Access Management (IAM) yang benar. Dalam tutorial ini, Anda membuat koleksi, mengunggah dan mencari data, dan kemudian menghapus koleksi.
Pengguna atau peran Anda harus memiliki kebijakan berbasis identitas terlampir dengan izin minimum berikut:
Untuk informasi selengkapnya tentang izin IAM OpenSearch Tanpa Server, lihat. Identity and Access Management untuk Amazon OpenSearch Serverless
Langkah 2: Buat koleksi
Untuk membuat koleksi baru, ikuti alur pembuatan koleksi terpadu (NextGen Express Create), yang secara otomatis mengonfigurasi kebijakan enkripsi, jaringan, dan akses data. Untuk petunjuk, lihat Buat NextGen koleksi (Express Create).
Untuk sisa tutorial ini, koleksi contoh diberi nama housing dan merupakan koleksi pencarian NextGen vektor.
catatan
Jika Anda memilih untuk membuat koleksi vektor Klasik sebagai gantinya, lihat Bekerja dengan koleksi vektor Klasik prosedur khusus untuk koleksi Klasik.
Langkah 3: Unggah dan cari data
Indeks adalah kumpulan dokumen dengan skema data umum yang menyediakan cara bagi Anda untuk menyimpan, mencari, dan mengambil embeddings vektor dan bidang lainnya. Anda dapat membuat dan mengunggah data ke indeks dalam koleksi OpenSearch Tanpa Server dengan menggunakan konsol Alat Dev di OpenSearch Dasbor, atau alat
Untuk mengindeks dan mencari data dalam koleksi perumahan
-
Untuk membuat indeks untuk koleksi baru Anda, kirim permintaan berikut di konsol Alat Dev
. Secara default, ini menciptakan indeks dengan jarak Euclidean dan kompresi 32x. PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "space_type": "l2" }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } } -
Untuk menggunakan tingkat kompresi yang berbeda, atur
compression_leveldalam pemetaan bidang. Contoh berikut membuat indeks dengancompression_levelset ke 1x.PUT housing-index-1x { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "compression_level": "1x", "space_type": "l2" }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } }Tingkat kompresi yang didukung adalah 1x, 2x, 8x, 16x, dan 32x.
-
Untuk mengindeks dokumen
housing-index, Anda dapat menggunakan ID yang dihasilkan sistem (POST) atau ID yang disediakan pengguna (PUT).# System-generated document ID POST housing-index/_doc { "housing-vector": [10, 20, 30], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } # User-provided document ID PUT housing-index/_doc/100 { "housing-vector": [10, 20, 30], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
Untuk mencari properti yang mirip dengan yang ada di indeks Anda, kirim kueri berikut. Secara default, respons pencarian mengecualikan vektor asli
_sourceuntuk mengurangi latensi dan ukuran muatan.GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [10, 20, 30], "k": 2 } } } }Tanggapan mengecualikan
housing-vectorbidang dari_source:{ "took": 10, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "housing-index", "_id": "100", "_score": 1, "_source": { "price": "2800", "location": "47.71, 122.00", "title": "2 bedroom in downtown Seattle" } } ] } }
Ambil dokumen lengkap dengan vektor
Untuk mengganti perilaku default, setel _source ke true dalam permintaan pencarian. Anda juga dapat menggunakan excludes opsiincludes/_sourceuntuk mengambil bidang tertentu.
GET housing-index/_search { "size": 5, "_source": true, "query": { "knn": { "housing-vector": { "vector": [10, 20, 30], "k": 2 } } } }
Tanggapan sekarang mencakup housing-vector bidang di_source:
{ "took": 10, "timed_out": false, "_shards": { "total": 0, "successful": 0, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1, "hits": [ { "_index": "housing-index", "_id": "100", "_score": 1, "_source": { "housing-vector": [10, 20, 30], "price": "2800", "location": "47.71, 122.00", "title": "2 bedroom in downtown Seattle" } } ] } }
Langkah 4: Hapus koleksi
Karena koleksi perumahan adalah untuk tujuan pengujian, hapus setelah Anda selesai bereksperimen.
Untuk menghapus koleksi OpenSearch Tanpa Server
-
Buka konsol OpenSearch Layanan Amazon.
-
Di panel navigasi kiri, pilih Koleksi dan pilih koleksi perumahan.
-
Pilih Hapus dan konfirmasikan penghapusan.
Pencarian yang difilter
Anda dapat menggunakan filter untuk menyempurnakan hasil pencarian semantik Anda. Untuk membuat indeks dan melakukan pencarian yang difilter pada dokumen Anda, ganti Upload dan cari data di tutorial sebelumnya dengan instruksi berikut. Langkah-langkah lainnya tetap sama. Untuk informasi selengkapnya tentang filter, lihat Penelusuran K-nn dengan
Untuk mengindeks dan mencari data dalam koleksi perumahan
-
Untuk membuat indeks tunggal untuk koleksi Anda, kirim permintaan berikut di konsol Alat Dev
: PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "space_type": "l2", "method": { "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } } -
Untuk mengindeks satu dokumen ke housing-index-filtered, kirim permintaan berikut:
POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
Untuk mencari data Anda untuk sebuah apartemen di Seattle dengan harga tertentu dan dalam jarak tertentu dari titik geografis, kirim permintaan berikut:
GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }
Batasan
-
Pencarian radial tidak didukung pada indeks NextGen vektor yang menggunakan kompresi 32x.
Bekerja dengan koleksi vektor Klasik
Koleksi vektor klasik adalah generasi asli pencarian vektor OpenSearch Tanpa Server. Gunakan prosedur di bagian ini jika Anda memiliki koleksi vektor Klasik yang ada. Untuk koleksi baru, kami sarankan NextGen — lihat Membuat koleksi untuk membuat koleksi NextGen vektor.
catatan
-
Koleksi Amazon OpenSearch Serverless Classic mendukung kuantisasi skalar 16-bit Faiss, yang melakukan konversi antara vektor mengambang 32-bit dan 16-bit. Untuk mempelajari lebih lanjut, lihat Kuantisasi skalar 16-bit Faiss
. Anda juga dapat menggunakan vektor biner untuk mengurangi biaya memori. Untuk informasi lebih lanjut, lihat Vektor biner . -
Koleksi Amazon OpenSearch Serverless Classic mendukung pencarian vektor berbasis disk, yang secara signifikan mengurangi biaya operasional untuk beban kerja vektor di lingkungan memori rendah. Untuk informasi lebih lanjut, lihat pencarian Disk-based vektor
.
Contoh berikut berlaku untuk koleksi vektor Klasik, yang menggunakan nmslib mesin secara default dan menyertakan vektor asli dalam respons pencarian.
Untuk mengindeks dan mencari data dalam koleksi perumahan Klasik
-
Untuk membuat indeks untuk koleksi Klasik Anda, kirim permintaan berikut di konsol Alat Dev
. Secara default, ini menciptakan indeks dengan nmslibmesin dan jarak Euclidean.PUT housing-index { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3 }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } } -
Untuk mengindeks satu dokumen ke indeks perumahan, kirim permintaan berikut:
POST housing-index/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
Untuk mencari properti yang mirip dengan yang ada di indeks Anda, kirim kueri berikut:
GET housing-index/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 10, 20, 30 ], "k": 5 } } } }
Untuk membuat indeks dan melakukan pencarian yang difilter, gunakan contoh berikut. Untuk informasi selengkapnya tentang filter, lihat Penelusuran K-nn dengan
Untuk mengindeks dan melakukan pencarian yang difilter pada koleksi perumahan Klasik
-
Untuk membuat indeks tunggal untuk koleksi Anda, kirim permintaan berikut di konsol Alat Dev
: PUT housing-index-filtered { "settings": { "index.knn": true }, "mappings": { "properties": { "housing-vector": { "type": "knn_vector", "dimension": 3, "method": { "engine": "faiss", "name": "hnsw" } }, "title": { "type": "text" }, "price": { "type": "long" }, "location": { "type": "geo_point" } } } } -
Untuk mengindeks satu dokumen ke housing-index-filtered, kirim permintaan berikut:
POST housing-index-filtered/_doc { "housing-vector": [ 10, 20, 30 ], "title": "2 bedroom in downtown Seattle", "price": "2800", "location": "47.71, 122.00" } -
Untuk mencari data Anda untuk sebuah apartemen di Seattle dengan harga tertentu dan dalam jarak tertentu dari titik geografis, kirim permintaan berikut:
GET housing-index-filtered/_search { "size": 5, "query": { "knn": { "housing-vector": { "vector": [ 0.1, 0.2, 0.3 ], "k": 5, "filter": { "bool": { "must": [ { "query_string": { "query": "Find me 2 bedroom apartment in Seattle under $3000 ", "fields": [ "title" ] } }, { "range": { "price": { "lte": 3000 } } }, { "geo_distance": { "distance": "100miles", "location": { "lat": 48, "lon": 121 } } } ] } } } } } }
Koleksi vektor klasik memiliki batasan sebagai berikut:
-
Koleksi pencarian vektor tidak mendukung mesin Apache Lucene ANN.
-
Koleksi pencarian vektor hanya mendukung algoritma HNSW dengan Faiss. Mereka tidak mendukung IVF atau IVFQ.
-
Koleksi pencarian vektor tidak mendukung pemanasan, statistik, dan operasi API pelatihan model.
-
Koleksi pencarian vektor tidak mendukung skrip sebaris atau tersimpan.
-
Informasi jumlah indeks tidak tersedia di koleksi Konsol Manajemen AWS pencarian vektor.
-
Interval penyegaran untuk indeks pada koleksi pencarian vektor adalah 60 detik.
Billion-scale beban kerja
Koleksi pencarian vektor klasik mendukung beban kerja dengan miliaran vektor. Anda tidak perlu mengindeks ulang untuk tujuan penskalaan karena penskalaan otomatis melakukan ini untuk Anda. Jika Anda memiliki jutaan vektor (atau lebih) dengan jumlah dimensi yang tinggi dan membutuhkan lebih dari 200 OCU, hubungi AWS Support
Langkah selanjutnya
Sekarang setelah Anda tahu cara membuat koleksi pencarian vektor dan data indeks, Anda dapat mencoba latihan berikut:
-
Gunakan klien OpenSearch Python untuk bekerja dengan koleksi pencarian vektor. Lihat tutorial ini di GitHub
. -
Gunakan klien OpenSearch Java untuk bekerja dengan koleksi pencarian vektor. Lihat tutorial ini di GitHub
. -
Siapkan LangChain untuk digunakan OpenSearch sebagai penyimpanan vektor. LangChain adalah kerangka kerja open source untuk mengembangkan aplikasi yang didukung oleh model bahasa. Lihat informasi yang lebih lengkap dalam dokumentasi LangChain
.