Indeks Skalar
Milvus mendukung pencarian terfilter yang menggabungkan bidang skalar dan vektor. Untuk meningkatkan efisiensi pencarian yang melibatkan bidang skalar, Milvus memperkenalkan pengindeksan bidang skalar mulai versi 2.1.0. Artikel ini memberikan gambaran umum mengenai pengindeksan medan skalar di Milvus, untuk membantu Anda memahami arti penting dan implementasinya.
Gambaran Umum
Setelah melakukan pencarian kemiripan vektor di Milvus, Anda dapat menggunakan operator logika untuk mengorganisasikan bidang skalar ke dalam ekspresi boolean.
Ketika Milvus menerima permintaan pencarian dengan ekspresi boolean, Milvus menguraikan ekspresi boolean menjadi pohon sintaks abstrak (AST) untuk menghasilkan rencana fisik untuk pemfilteran atribut. Milvus kemudian menerapkan rencana fisik di setiap segmen untuk menghasilkan bitset sebagai hasil penyaringan dan menyertakan hasilnya sebagai parameter pencarian vektor untuk mempersempit cakupan pencarian. Dalam hal ini, kecepatan pencarian vektor sangat bergantung pada kecepatan pemfilteran atribut.
Pemfilteran atribut dalam segmen
Pengindeksan bidang skalar adalah cara untuk memastikan kecepatan pemfilteran atribut dengan mengurutkan nilai bidang skalar dengan cara tertentu untuk mempercepat pencarian informasi.
Algoritma pengindeksan bidang skalar
Milvus bertujuan untuk mencapai penggunaan memori yang rendah, efisiensi penyaringan yang tinggi, dan waktu pemuatan yang singkat dengan algoritme pengindeksan bidang skalar. Algoritme ini dikategorikan ke dalam dua jenis utama: pengindeksan otomatis dan pengindeksan terbalik.
Pengindeksan otomatis
Milvus menyediakan opsi AUTOINDEX
untuk membebaskan Anda dari keharusan memilih jenis indeks secara manual. Ketika memanggil metode create_index
, jika index_type
tidak ditentukan, Milvus secara otomatis memilih jenis indeks yang paling sesuai berdasarkan tipe data.
Tabel berikut mencantumkan tipe data yang didukung Milvus dan algoritme pengindeksan otomatis yang sesuai.
Tipe data | Algoritme pengindeksan otomatis |
---|---|
VARCHAR | Indeks terbalik |
INT8 | Indeks terbalik |
INT16 | Indeks terbalik |
INT32 | Indeks terbalik |
INT64 | Indeks terbalik |
FLOAT | Indeks terbalik |
GANDA | Indeks terbalik |
Pengindeksan terbalik
Pengindeksan terbalik menawarkan cara yang fleksibel untuk membuat indeks untuk bidang skalar dengan menentukan parameter indeks secara manual. Metode ini bekerja dengan baik untuk berbagai skenario, termasuk kueri titik, kueri pencocokan pola, pencarian teks lengkap, pencarian JSON, pencarian Boolean, dan bahkan kueri pencocokan awalan.
Indeks terbalik yang diimplementasikan di Milvus didukung oleh Tantivy, sebuah pustaka mesin pencari teks lengkap. Tantivy memastikan bahwa pengindeksan terbalik di Milvus efisien dan cepat.
Indeks terbalik memiliki dua komponen utama: kamus istilah dan daftar terbalik. Kamus istilah mencakup semua kata yang diberi tanda yang diurutkan menurut abjad, sedangkan daftar terbalik berisi daftar dokumen di mana setiap kata muncul. Pengaturan ini membuat kueri titik dan kueri rentang jauh lebih cepat dan lebih efisien daripada pencarian brute force.
Diagram indeks terbalik
Keuntungan menggunakan indeks terbalik terutama terlihat dalam operasi berikut:
- Kueri titik: Misalnya, ketika mencari dokumen yang mengandung kata Milvus, prosesnya dimulai dengan memeriksa apakah Milvus ada dalam kamus istilah. Jika tidak ditemukan, tidak ada dokumen yang mengandung kata tersebut. Namun, jika ditemukan, daftar terbalik yang terkait dengan Milvus diambil, yang menunjukkan dokumen yang mengandung kata tersebut. Metode ini jauh lebih efisien daripada pencarian brute-force melalui jutaan dokumen, karena kamus istilah yang diurutkan secara signifikan mengurangi kerumitan waktu untuk menemukan kata Milvus.
- Kueri rentang: Efisiensi kueri rentang, seperti menemukan dokumen dengan kata yang secara alfabetis lebih besar daripada sangat, juga ditingkatkan oleh kamus istilah yang diurutkan. Pendekatan ini lebih efisien daripada pencarian brute-force, memberikan hasil yang lebih cepat dan lebih akurat.
Hasil pengujian
Untuk menunjukkan peningkatan kinerja yang disediakan oleh indeks skalar di Milvus, sebuah percobaan dilakukan dengan membandingkan kinerja beberapa ekspresi menggunakan pengindeksan terbalik dan pencarian brute-force pada data mentah.
Eksperimen ini melibatkan pengujian berbagai ekspresi dalam dua kondisi: dengan indeks terbalik dan dengan pencarian brute-force. Untuk memastikan keadilan, distribusi data yang sama dipertahankan di seluruh pengujian, dengan menggunakan koleksi yang sama setiap kali. Sebelum setiap pengujian, koleksi dirilis, dan indeks dibuang dan dibangun kembali. Selain itu, kueri hangat dilakukan sebelum setiap pengujian untuk meminimalkan dampak data dingin dan panas, dan setiap kueri dieksekusi beberapa kali untuk memastikan keakuratan.
Untuk dataset yang terdiri dari 1 juta record, menggunakan indeks terbalik dapat memberikan peningkatan kinerja hingga 30x lipat untuk kueri titik. Peningkatan kinerja bisa lebih signifikan untuk dataset yang lebih besar.
Rekomendasi kinerja
Untuk memanfaatkan sepenuhnya kemampuan Milvus dalam pengindeksan bidang skalar dan mengeluarkan kekuatannya dalam pencarian kemiripan vektor, Anda mungkin memerlukan model untuk memperkirakan ukuran memori yang diperlukan berdasarkan data yang Anda miliki.
Tabel-tabel berikut mencantumkan fungsi-fungsi estimasi untuk semua tipe data yang didukung oleh Milvus.
Bidang numerik
Tipe data Fungsi estimasi memori (MB) INT8 numOfRows * 12 / 1024 / 1024 INT16 numOfRows * 12 / 1024 / 1024 INT32 numOfRows * 12 / 1024 / 1024 INT64 numOfRows * 24 / 1024 / 1024 FLOAT32 numOfRows * 12 / 1024 / 1024 GANDA numOfRows * 24 / 1024 / 1024 Bidang string
Panjang string Fungsi estimasi memori (MB) (0, 8] numOfRows * 128 / 1024 / 1024 (8, 16] numOfRows * 144 / 1024 / 1024 (16, 32] numOfRows * 160 / 1024 / 1024 (32, 64] numOfRows * 192 / 1024 / 1024 (64, 128] numOfRows * 256 / 1024 / 1024 (128, 65535] numOfRows * strLen * 1.5 / 1024 / 1024
Apa selanjutnya
Untuk mengindeks bidang skalar, baca Membuat Indeks pada Skalar.
Untuk mempelajari lebih lanjut tentang istilah dan aturan terkait yang disebutkan di atas, baca