OpenSearch menyediakan fitur vector search untuk berbagai skenario bisnis kompleks. Pada skenario tertentu, seperti pencarian tanya-jawab di bidang pendidikan dan image search, Anda dapat menggabungkan fitur vector search dengan fitur multi-channel search untuk meningkatkan akurasi hasil pencarian 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. Parameter ini menggunakan format dictionary, dengan kunci berupa nama indeks vektor yang akan dikueri dan nilai berisi konfigurasi kueri spesifik. Nilai tersebut dapat mencakup item konfigurasi umum berikut:
Parameter | Type | Nilai default | Deskripsi |
namespaces | list<string> | Mem-partisi indeks vektor berdasarkan namespace. Hal ini memungkinkan Anda membatasi permintaan kueri hanya ke partisi tertentu dari indeks tersebut. Jangan gunakan lebih dari 10.000 namespace. Jika Anda mengonfigurasi namespaces, Anda harus menentukan namespace dalam kueri Anda. | |
threshold | float | Ambang batas skor minimum untuk pengambilan vektor. | |
top_n | uint32 | Jumlah N hasil teratas yang 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 berlaku dalam skenario multi-channel recall.
Contoh: Kueri indeks vektor berdimensi 64
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
Menetapkan ambang batas skor minimum
Deskripsi: Mengecualikan vektor dengan skor di bawah ambang batas yang ditentukan 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}}Menentukan kueri top N
Deskripsi: Menentukan jumlah hasil teratas yang 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}}Mengurutkan hasil berdasarkan skor vektor
Deskripsi: Gunakan fungsi proxima_score(index_name) dalam ekspresi penyortiran halus untuk mengambil skor jarak vektor.
index_name: Nama indeks vektor.Mengembalikan nilai
floatyang merepresentasikan jarak vektor. Untuk dokumen yang tidak dikembalikan oleh pencarian vektor, skor default-nya adalah 10.000.Contoh:
proxima_score(your_vector_index).
Prosedur:
Buat kebijakan penyortiran halus:

Pada halaman Search Test, pilih kebijakan penyortiran halus tersebut dan jalankan pengujian:

Sistem menggunakan Jarak Euclidean (l2) secara default.
Untuk jarak inner product (ip), skor vektor yang lebih besar menunjukkan relevansi dokumen yang lebih tinggi.
Untuk 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. Jika Anda ingin menggunakan jarak inner product (ip), Anda harus melakukan Normalisasi vektor sebelum meneruskan data ke engine.
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. Satu kueri mendukung maksimal dua indeks vektor.