🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Konsep

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.

Attribute filtering in a segment 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 dataAlgoritme pengindeksan otomatis
VARCHARIndeks terbalik
INT8Indeks terbalik
INT16Indeks terbalik
INT32Indeks terbalik
INT64Indeks terbalik
FLOATIndeks terbalik
GANDAIndeks 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.

Inverted index diagram 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 dataFungsi estimasi memori (MB)
    INT8numOfRows * 12 / 1024 / 1024
    INT16numOfRows * 12 / 1024 / 1024
    INT32numOfRows * 12 / 1024 / 1024
    INT64numOfRows * 24 / 1024 / 1024
    FLOAT32numOfRows * 12 / 1024 / 1024
    GANDAnumOfRows * 24 / 1024 / 1024
  • Bidang string

    Panjang stringFungsi 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

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?