OpenSearch menyediakan fitur pencarian vektor untuk mendukung skenario bisnis yang beragam dan kompleks. Dalam skenario seperti pencarian tanya-jawab di bidang pendidikan atau pencarian citra, Anda dapat menggunakan fitur pencarian vektor bersama dengan pencarian multi-saluran untuk meningkatkan akurasi hasil secara signifikan. Topik ini menjelaskan sintaksis dan catatan terkait indeks vektor.
Sintaksis
query = vector_index:'vector'&vector_search={"vector_index":{"namespaces":[],"threshold":0.5,"top_n":10,"search_params":{}}}
Parameter vector_search bersifat opsional dan digunakan untuk mengonfigurasi kueri indeks vektor dalam format kamus. Kunci adalah nama indeks vektor yang akan dikueri, sedangkan nilainya mencakup konfigurasi spesifik kueri, termasuk item konfigurasi umum berikut:
Parameter | Tipe | Nilai default | Deskripsi |
namespaces | list<string> | Membagi indeks vektor berdasarkan namespace. Ini memungkinkan Anda membatasi permintaan kueri ke partisi tertentu dari indeks. Jangan gunakan lebih dari 10.000 namespace. Jika Anda mengonfigurasi namespace, Anda harus menentukan namespace dalam kueri Anda. | |
threshold | float | Ambang batas skor minimum untuk pengambilan vektor. | |
top_n | uint32 | Jumlah hasil N teratas yang akan dikembalikan untuk pengambilan vektor. | |
search_params.qc_scan_ratio | float | 0,01 | Rasio dokumen yang dipindai selama kueri indeks QC. Jumlah dokumen yang dipindai = Total jumlah dokumen × scan_ratio. |
search_params.hnsw_ef | uint32 | 500 | Jumlah dokumen yang dipindai selama kueri indeks HNSW. Nilai yang lebih besar meningkatkan tingkat recall dan waktu yang dibutuhkan. |
Parameter vector_search juga valid dalam skenario recall multi-saluran.
Contoh: Kueri indeks vektor 64 dimensi
vector: '0.377796,-0.958450,0.409853,-0.238177,-1.293826,0.356797,-0.295727,0.847301,-1.220337,0.148032,-1.128458,0.903187,0.509352,0.293686,-1.005852,-0.488839,0.888227,-0.555556,-0.658025,0.267552,-0.567601,0.003045,0.591734,-0.515983,-1.316453,-1.462450,0.091946,1.554954,0.384802,0.720498,0.144338,1.217826,0.724039,0.044212,0.571332,-1.425430,0.618965,0.481887,-1.617787,1.505416,-0.683652,1.030900,0.562021,0.162437,0.816546,0.112229,-0.739288,-0.342643,-0.199292,0.508368,-1.384887,-1.842170,0.952622,-1.699499,0.199430,-0.232464,-0.273227,-0.383696,-0.511302,0.005458,1.873572,-0.926169,-0.417587,-0.660156'Contoh penggunaan
Tetapkan ambang batas skor minimum
Deskripsi: Menyisihkan vektor dengan skor di bawah ambang batas tertentu dari hasil pengambilan.
Format Parameter Lama: &sf=number
Format Parameter Baru: vector_search={"vector_index":{"threshold":0.8}}
Contoh:
// Versi lama
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&sf=0.8'
// Versi baru
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"index_name":{"threshold":0.8}}Tentukan kueri top N
Deskripsi: Menentukan jumlah hasil teratas yang akan dikembalikan dari pencarian vektor.
Format Parameter Lama: &n=number
Format Parameter Baru: vector_search={"vector_index":{"top_n":10}}
Contoh:
// Versi lama
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&n=10'
// Versi baru
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"index_name":{"top_n":10}}Urutkan hasil berdasarkan skor vektor
Deskripsi: Gunakan fungsi proxima_score() dalam ekspresi penyortiran halus untuk mengurutkan hasil berdasarkan skor vektor.
Langkah-langkah:
Buat kebijakan penyortiran halus:

Catatan: Parameter fungsi proxima_score adalah nama indeks vektor.
Di halaman Uji Pencarian, referensikan kebijakan penyortiran halus yang telah dibuat dan jalankan uji coba:

Sistem menggunakan Jarak Euclidean (l2) secara default.
Jarak produk dalam (ip): Skor vektor yang lebih besar menunjukkan relevansi dokumen yang lebih tinggi.
Jarak Euclidean (l2): Skor vektor yang lebih kecil menunjukkan relevansi dokumen yang lebih tinggi.
Catatan
Secara default, sistem menggunakan Jarak Euclidean (l2) untuk jarak vektor selama pembuatan indeks. Untuk menggunakan jarak produk dalam (ip), normalisasi vektor harus dilakukan sebelum melewatkan data ke mesin.
Bidang yang sesuai dengan indeks vektor harus bertipe DOUBLE_ARRAY.
Pemisah kata vektor mendukung dimensi 64, 128, 256, dan 512. Jumlah elemen dalam bidang DOUBLE_ARRAY yang sesuai harus sesuai dengan dimensi yang ditentukan.
Panjang maksimum indeks vektor adalah 4 KB sebelum encoding. Kueri mendukung maksimal dua indeks vektor.