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

milvus-logo
LFAI
Beranda
  • Konsep
  • Home
  • Docs
  • Konsep

  • Indeks Vektor

  • Indeks dalam memori

Indeks dalam memori

Topik ini berisi daftar berbagai jenis indeks dalam memori yang didukung Milvus, skenario yang paling sesuai, dan parameter yang dapat dikonfigurasikan oleh pengguna untuk mendapatkan performa pencarian yang lebih baik. Untuk indeks dalam disk, lihat Indeks Dalam Disk.

Pengindeksan adalah proses pengorganisasian data secara efisien, dan ini memainkan peran utama dalam membuat pencarian kemiripan menjadi berguna dengan mempercepat kueri yang memakan waktu secara dramatis pada kumpulan data yang besar.

Untuk meningkatkan kinerja kueri, Anda dapat menentukan jenis indeks untuk setiap bidang vektor.

Saat ini, bidang vektor hanya mendukung satu jenis indeks. Milvus secara otomatis menghapus indeks lama ketika mengganti jenis indeks.

Indeks vektor ANNS

Sebagian besar jenis indeks vektor yang didukung oleh Milvus menggunakan algoritme pencarian tetangga terdekat (ANNS). Dibandingkan dengan pengambilan yang akurat, yang biasanya sangat memakan waktu, ide inti dari ANNS tidak lagi terbatas pada mengembalikan hasil yang paling akurat, tetapi hanya mencari tetangga dari target. ANNS meningkatkan efisiensi pengambilan dengan mengorbankan akurasi dalam kisaran yang dapat diterima.

Menurut metode implementasinya, indeks vektor ANNS dapat dikategorikan ke dalam empat jenis: Berbasis pohon, berbasis grafik, berbasis hash, dan berbasis kuantisasi.

Indeks yang didukung dalam Milvus

Milvus mendukung berbagai jenis indeks, yang dikategorikan berdasarkan jenis penyematan vektor yang mereka tangani: penyematan floating-point (juga dikenal sebagai vektor floating point atau vektor padat), penyematan biner (juga dikenal sebagai vektor biner), dan penyematan jarang (juga dikenal sebagai vektor jarang).

Indeks untuk penyematan titik mengambang

Untuk penyematan floating-point 128 dimensi (vektor), penyimpanan yang digunakan adalah 128 * ukuran float = 512 byte. Dan metrik jarak yang digunakan untuk penyematan float-point adalah jarak Euclidean (L2) dan Inner product (IP).

Jenis-jenis indeks ini termasuk FLAT, IVF_FLAT, IVF_PQ, IVF_SQ8, HNSW, HNSW_SQ, HNSW_PQ, HNSW_PRQ, dan SCANN untuk pencarian ANN berbasis CPU.

Indeks untuk penyematan biner

Untuk sematan biner 128 dimensi, penyimpanan yang dibutuhkan adalah 128 / 8 = 16 byte. Dan metrik jarak yang digunakan untuk sematan biner adalah JACCARD dan HAMMING.

Jenis indeks ini termasuk BIN_FLAT dan BIN_IVF_FLAT.

Indeks untuk penyematan yang jarang

Indeks untuk sematan jarang hanya mendukung metrik IP dan BM25 (untuk pencarian teks lengkap).

Jenis indeks yang didukung untuk sematan jarang: SPARSE_INVERTED_INDEX.

Mulai Milvus 2.5.4 dan seterusnya, SPARSE_WAND sudah tidak digunakan lagi. Sebagai gantinya, disarankan untuk menggunakan "inverted_index_algo": "DAAT_WAND" untuk kesetaraan sambil mempertahankan kompatibilitas. Untuk informasi lebih lanjut, lihat Vektor Jarang.

Indeks yang didukung Klasifikasi Skenario
DATAR N/A
  • Dataset yang relatif kecil
  • Membutuhkan tingkat penarikan kembali 100%
IVF_FLAT N/A
  • Kueri berkecepatan tinggi
  • Membutuhkan tingkat penarikan setinggi mungkin
IVF_SQ8 Indeks berbasis kuantisasi
  • Kueri berkecepatan sangat tinggi
  • Sumber daya memori terbatas
  • Menerima kompromi kecil dalam tingkat pemanggilan kembali
IVF_PQ Indeks berbasis kuantisasi
  • Kueri berkecepatan tinggi
  • Sumber daya memori terbatas
  • Menerima kompromi kecil dalam tingkat pemanggilan kembali
HNSW Indeks berbasis grafik
  • Kueri berkecepatan sangat tinggi
  • Membutuhkan tingkat pemanggilan setinggi mungkin
  • Sumber daya memori yang besar
HNSW_SQ Indeks berbasis kuantisasi
  • Kueri berkecepatan sangat tinggi
  • Sumber daya memori terbatas
  • Menerima kompromi kecil dalam tingkat pemanggilan kembali
HNSW_PQ Indeks berbasis kuantisasi
  • Kueri kecepatan sedang
  • Sumber daya memori yang sangat terbatas
  • Menerima kompromi kecil dalam tingkat pemanggilan kembali
HNSW_PRQ Indeks berbasis kuantisasi
  • Kueri kecepatan sedang
  • Sumber daya memori yang sangat terbatas
  • Menerima kompromi kecil dalam tingkat pemanggilan kembali
SCANN Indeks berbasis kuantisasi
  • Kueri berkecepatan sangat tinggi
  • Membutuhkan tingkat pemanggilan setinggi mungkin
  • Sumber daya memori yang besar
Indeks yang didukung Klasifikasi Skenario
BIN_FLAT Indeks berbasis kuantisasi
  • Tergantung pada set data yang relatif kecil.
  • Membutuhkan akurasi yang sempurna.
  • Tidak menggunakan kompresi.
  • Menjamin hasil pencarian yang tepat.
BIN_IVF_FLAT Indeks berbasis kuantisasi
  • Kueri berkecepatan tinggi
  • Membutuhkan tingkat penarikan setinggi mungkin
Indeks yang didukung Klasifikasi Skenario
INDEKS_TERBALIK YANG JARANG Indeks terbalik
  • Tergantung pada set data yang relatif kecil.
  • Membutuhkan tingkat penarikan 100%.

FLAT

Untuk aplikasi pencarian kemiripan vektor yang membutuhkan akurasi sempurna dan bergantung pada set data yang relatif kecil (skala jutaan), indeks FLAT adalah pilihan yang baik. FLAT tidak memampatkan vektor, dan merupakan satu-satunya indeks yang dapat menjamin hasil pencarian yang tepat. Hasil dari FLAT juga dapat digunakan sebagai titik perbandingan untuk hasil yang dihasilkan oleh indeks lain yang memiliki recall kurang dari 100%.

FLAT akurat karena menggunakan pendekatan yang menyeluruh dalam melakukan pencarian, yang berarti untuk setiap kueri, input target dibandingkan dengan setiap kumpulan vektor dalam kumpulan data. Hal ini membuat FLAT menjadi indeks paling lambat dalam daftar kami, dan tidak cocok untuk melakukan kueri data vektor yang sangat besar. Tidak ada parameter yang diperlukan untuk indeks FLAT di Milvus, dan untuk menggunakannya tidak memerlukan pelatihan data.

  • Parameter pencarian

    ParameterDeskripsiRange
    metric_type[Opsional] Metrik jarak yang dipilih.Lihat Metrik yang Didukung.

IVF_FLAT

IVF_FLAT membagi data vektor ke dalam unit klaster nlist, lalu membandingkan jarak antara vektor input target dan pusat setiap klaster. Bergantung pada jumlah klaster yang diatur oleh sistem untuk melakukan kueri (nprobe), hasil pencarian kemiripan dikembalikan berdasarkan perbandingan antara input target dan vektor dalam klaster yang paling mirip saja - secara drastis mengurangi waktu kueri.

Dengan menyesuaikan nprobe, keseimbangan ideal antara akurasi dan kecepatan dapat ditemukan untuk skenario tertentu. Hasil dari uji kinerja IVF_FLAT menunjukkan bahwa waktu kueri meningkat tajam seiring dengan bertambahnya jumlah vektor input target (nq), dan jumlah cluster yang dicari (nprobe).

IVF_FLAT adalah indeks IVF yang paling dasar, dan data yang disandikan yang disimpan di setiap unit konsisten dengan data aslinya.

  • Parameter pembangunan indeks

    ParameterDeskripsiRentangNilai Default
    nlistJumlah unit cluster[1, 65536]128
  • Parameter pencarian

    • Pencarian umum

      ParameterDeskripsiRentangNilai Default
      nprobeJumlah unit yang akan ditanyakan[1, nlist]8
    • Pencarian rentang

      ParameterDeskripsiRentangNilai Default
      max_empty_result_bucketsJumlah maksimum bucket yang tidak mengembalikan hasil pencarian.
      Ini adalah parameter pencarian rentang dan menghentikan proses pencarian ketika jumlah bucket kosong secara berurutan mencapai nilai yang ditentukan.
      Meningkatkan nilai ini dapat meningkatkan tingkat penarikan dengan mengorbankan waktu pencarian yang lebih lama.
      [1, 65535]2

IVF_SQ8

IVF_FLAT tidak melakukan kompresi apa pun, sehingga file indeks yang dihasilkannya memiliki ukuran yang kurang lebih sama dengan data vektor mentah yang tidak diindeks. Sebagai contoh, jika set data SIFT 1B asli berukuran 476 GB, file indeks IVF_FLAT akan sedikit lebih kecil (~470 GB). Memuat semua file indeks ke dalam memori akan menghabiskan 470 GB penyimpanan.

Ketika sumber daya memori disk, CPU, atau GPU terbatas, IVF_SQ8 adalah pilihan yang lebih baik daripada IVF_FLAT. Jenis indeks ini dapat mengubah setiap FLOAT (4 byte) menjadi UINT8 (1 byte) dengan melakukan Kuantisasi Skalar (SQ). Hal ini mengurangi konsumsi memori disk, CPU, dan GPU sebesar 70-75%. Untuk kumpulan data SIFT 1B, file indeks IVF_SQ8 hanya membutuhkan penyimpanan 140 GB.

  • Parameter pembuatan indeks

    ParameterDeskripsiRentang
    nlistJumlah unit cluster[1, 65536]
  • Parameter pencarian

    • Pencarian umum

      ParameterDeskripsiRentangNilai Default
      nprobeJumlah unit yang akan ditanyakan[1, nlist]8
    • Pencarian rentang

      ParameterDeskripsiRentangNilai Default
      max_empty_result_bucketsJumlah maksimum bucket yang tidak mengembalikan hasil pencarian.
      Ini adalah parameter pencarian rentang dan menghentikan proses pencarian ketika jumlah bucket kosong secara berurutan mencapai nilai yang ditentukan.
      Meningkatkan nilai ini dapat meningkatkan tingkat penarikan dengan mengorbankan waktu pencarian yang lebih lama.
      [1, 65535]2

IVF_PQ

PQ (Kuantisasi Produk) secara seragam menguraikan ruang vektor dimensi tinggi asli menjadi produk Cartesian dari ruang vektor dimensi rendah m, dan kemudian mengkuantisasi ruang vektor dimensi rendah yang terurai. Alih-alih menghitung jarak antara vektor target dan pusat semua unit, kuantisasi produk memungkinkan perhitungan jarak antara vektor target dan pusat pengelompokan setiap ruang dimensi rendah dan sangat mengurangi kompleksitas waktu dan kompleksitas ruang algoritma.

IVF_PQ melakukan pengelompokan indeks IVF sebelum mengkuantisasi produk vektor. File indeksnya bahkan lebih kecil daripada IVF_SQ8, tetapi juga menyebabkan hilangnya akurasi selama pencarian vektor.

Parameter pembuatan indeks dan parameter pencarian bervariasi dengan distribusi Milvus. Pilih distribusi Milvus Anda terlebih dahulu.

  • Parameter pembuatan indeks

    ParameterDeskripsiRentang
    nlistJumlah unit cluster[1, 65536]
    mJumlah faktor kuantisasi produkdim mod m == 0
    nbits[Opsional] Jumlah bit tempat penyimpanan setiap vektor dimensi rendah.[1, 64] (8 secara default)
  • Parameter pencarian

    • Pencarian umum

      ParameterDeskripsiRentangNilai Default
      nprobeJumlah unit yang akan ditanyakan[1, nlist]8
    • Pencarian rentang

      ParameterDeskripsiRentangNilai Default
      max_empty_result_bucketsJumlah maksimum bucket yang tidak mengembalikan hasil pencarian.
      Ini adalah parameter pencarian rentang dan menghentikan proses pencarian ketika jumlah bucket kosong secara berurutan mencapai nilai yang ditentukan.
      Meningkatkan nilai ini dapat meningkatkan tingkat penarikan dengan mengorbankan waktu pencarian yang lebih lama.
      [1, 65535]2

SCANN

ScaNN (Scalable Nearest Neighbors) mirip dengan IVF_PQ dalam hal pengelompokan vektor dan kuantisasi produk. Apa yang membuat mereka berbeda terletak pada detail implementasi kuantisasi produk dan penggunaan SIMD (Single-Instruction/Multi-data) untuk penghitungan yang efisien.

  • Parameter pembangunan indeks

    ParameterDeskripsiRentang
    nlistJumlah unit cluster[1, 65536]
    with_raw_dataApakah akan menyertakan data mentah dalam indeksTrue atau False. Nilai default untuk True.

    Tidak seperti IVF_PQ, nilai default berlaku untuk m dan nbits untuk kinerja yang dioptimalkan.

  • Parameter pencarian

    • Pencarian umum

      ParameterDeskripsiRentangNilai default
      nprobeJumlah unit yang akan ditanyakan[1, nlist]
      reorder_kJumlah unit kandidat yang akan ditanyakan[top_k, ∞]top_k
    • Pencarian rentang

      ParameterDeskripsiRentangNilai Default
      max_empty_result_bucketsJumlah maksimum bucket yang tidak mengembalikan hasil pencarian.
      Ini adalah parameter pencarian rentang dan menghentikan proses pencarian ketika jumlah bucket kosong secara berurutan mencapai nilai yang ditentukan.
      Meningkatkan nilai ini dapat meningkatkan tingkat penarikan dengan mengorbankan waktu pencarian yang lebih lama.
      [1, 65535]2

HNSW

HNSW (Hierarchical Navigable Small World Graph) adalah algoritma pengindeksan berbasis grafik. Algoritma ini membangun struktur navigasi multi-lapisan untuk sebuah gambar menurut aturan tertentu. Dalam struktur ini, lapisan atas lebih jarang dan jarak antar node lebih jauh; lapisan bawah lebih padat dan jarak antar node lebih dekat. Pencarian dimulai dari lapisan paling atas, menemukan node yang paling dekat dengan target di lapisan ini, dan kemudian memasuki lapisan berikutnya untuk memulai pencarian lain. Setelah beberapa kali iterasi, ia dapat dengan cepat mendekati posisi target.

Untuk meningkatkan kinerja, HNSW membatasi tingkat maksimum node pada setiap lapisan grafik ke M. Selain itu, Anda dapat menggunakan efConstruction (saat membangun indeks) atau ef (saat mencari target) untuk menentukan rentang pencarian.

  • Parameter pembangunan indeks

    ParameterDeskripsiRentangNilai Default
    MM mendefinisikan jumlah maksimum koneksi keluar dalam grafik. M yang lebih tinggi akan menghasilkan akurasi/waktu_jalan yang lebih tinggi pada ef/efKonstruksi yang tetap.[2, 2048]Tidak ada
    efConstructionef_construction mengontrol kecepatan pencarian indeks/pertukaran kecepatan pembangunan. Meningkatkan parameter efConstruction dapat meningkatkan kualitas indeks, tetapi juga cenderung memperpanjang waktu pengindeksan.[1, int_max]Tidak ada
  • Parameter pencarian

    ParameterDeskripsiRentangNilai Default
    efParameter yang mengendalikan pertukaran waktu kueri/akurasi. ef yang lebih tinggi akan menghasilkan pencarian yang lebih akurat namun lebih lambat.[top_k, int_max]Tidak ada

HNSW_SQ

Kuantisasi Skalar (SQ) adalah teknik yang digunakan untuk mendiskritkan data floating-point menjadi sekumpulan nilai yang terbatas berdasarkan besarnya. Sebagai contoh, SQ6 merepresentasikan kuantisasi ke dalam (2^6 = 64) nilai diskrit, di mana setiap angka floating-point dikodekan menggunakan 6 bit. Demikian pula, SQ8 mengkuantisasi data menjadi (2^8 = 256) nilai diskrit, dengan setiap angka floating-point diwakili oleh 8 bit. Kuantisasi ini mengurangi jejak memori sekaligus mempertahankan struktur data yang penting untuk pemrosesan yang efisien.

Dikombinasikan dengan SQ, HNSW_SQ menawarkan pertukaran yang dapat dikontrol antara ukuran indeks dan akurasi, sambil mempertahankan kinerja query-per-detik (QPS) yang tinggi. Dibandingkan dengan HNSW standar, ini menghasilkan peningkatan yang tidak terlalu besar dalam waktu pembangunan indeks.

  • Parameter pembangunan indeks

    ParameterDeskripsiRentangNilai Default
    MM mendefinisikan jumlah maksimum koneksi keluar dalam grafik. M yang lebih tinggi akan menghasilkan akurasi/waktu_jalan yang lebih tinggi pada ef/efKonstruksi yang tetap.[2, 2048]Tidak ada
    efConstructionef_construction mengontrol kecepatan pencarian indeks/pertukaran kecepatan pembangunan. Meningkatkan parameter efConstruction dapat meningkatkan kualitas indeks, tetapi juga cenderung memperpanjang waktu pengindeksan.[1, int_max]Tidak ada
    sq_typeJenis kuantizer skalar.SQ6,SQ8, BF16, FP16SQ8
    refineApakah data yang disempurnakan dicadangkan selama pembangunan indeks.true, falsefalse
    refine_typeTipe data dari indeks yang disempurnakan.SQ6, SQ8, BF16, FP16, FP32Tidak ada
  • Parameter pencarian

    ParameterDeskripsiRentangNilai Default
    efParameter yang mengendalikan pertukaran waktu kueri/akurasi. ef yang lebih tinggi akan menghasilkan pencarian yang lebih akurat namun lebih lambat.[top_k, int_max]Tidak ada
    refine_kFaktor pembesaran dari refine dibandingkan dengan k.[1, float_max] (1, float_max)1

HNSW_PQ

Ide dasar dari PQ adalah untuk membagi vektor menjadi sub-vektor m, yang masing-masing akan menemukan 2^{nbits} centroid berdasarkan kmeans, dan setiap sub-vektor akan memilih centroid terdekat sebagai perkiraan sub-vektor. Kemudian kita mencatat semua centroid, sehingga setiap subvektor dapat dikodekan sebagai nbits, dan vektor mengambang dengan panjang dim dapat dikodekan sebagai m ⋅ n bit.

Dikombinasikan dengan PQ, HNSW_PQ menawarkan pertukaran yang dapat dikontrol antara ukuran indeks dan akurasi, tetapi memiliki nilai QPS yang lebih rendah dan tingkat penarikan yang lebih tinggi daripada HNSW_SQ untuk tingkat kompresi yang sama. Dibandingkan dengan HNSW_SQ, dibutuhkan waktu lebih lama untuk membangun indeks.

  • Parameter pembangunan indeks

    ParameterDeskripsiRentangNilai Default
    MM mendefinisikan jumlah maksimum koneksi keluar dalam grafik. M yang lebih tinggi akan menghasilkan akurasi/waktu_jalan yang lebih tinggi pada ef/efKonstruksi yang tetap.[2, 2048]Tidak ada
    efConstructionef_construction mengontrol kecepatan pencarian indeks/pertukaran kecepatan pembangunan. Meningkatkan parameter efConstruction dapat meningkatkan kualitas indeks, tetapi juga cenderung memperpanjang waktu pengindeksan.[1, int_max]Tidak ada
    mJumlah kelompok sub-vektor untuk membagi vektor.[1, 65536]32
    nbitsJumlah bit yang dikuantisasi ke dalam setiap kelompok sub-vektor.[1, 24]8
    refineApakah data yang disempurnakan dicadangkan selama pembangunan indeks.true, falsefalse
    refine_typeTipe data dari indeks penghalusan.SQ6, SQ8, BF16, FP16, FP32Tidak ada
  • Parameter pencarian

    ParameterDeskripsiRentangNilai Default
    efParameter yang mengendalikan pertukaran waktu kueri/akurasi. ef yang lebih tinggi akan menghasilkan pencarian yang lebih akurat namun lebih lambat.[top_k, int_max]Tidak ada
    refine_kFaktor pembesaran dari refine dibandingkan dengan k.[1, float_max] (1, float_max)1

HNSW_PRQ

PRQ mirip dengan PQ, dan juga membagi vektor ke dalam kelompok-kelompok m. Setiap sub-vektor akan dikodekan sebagai nbits. Setelah menyelesaikan kuantisasi pq, ia akan menghitung sisa antara vektor dan vektor terkuantisasi pq, dan menerapkan kuantisasi pq ke vektor sisa. Sebanyak nrq kuantisasi pq lengkap akan dilakukan, sehingga vektor mengambang dengan panjang dim akan dikodekan sebagai m ⋅ nbit ⋅ nrq bit.

Dikombinasikan dengan Product Residual Quantizer (PRQ), HNSW_PRQ menawarkan pertukaran yang dapat dikontrol lebih tinggi antara ukuran indeks dan akurasi. Memiliki nilai QPS yang hampir setara dan tingkat recall yang lebih tinggi daripada HNSW_PQ untuk tingkat kompresi yang sama. Dibandingkan dengan HNSW_PQ, waktu untuk membangun indeks dapat meningkat beberapa kali lipat.

  • Parameter pembangunan indeks

    ParameterDeskripsiRentangNilai Default
    MM mendefinisikan jumlah maksimum koneksi keluar dalam grafik. M yang lebih tinggi akan menghasilkan akurasi/waktu_jalan yang lebih tinggi pada ef/efKonstruksi yang tetap.[2, 2048]Tidak ada
    efConstructionef_construction mengontrol kecepatan pencarian indeks/pertukaran kecepatan pembangunan. Meningkatkan parameter efConstruction dapat meningkatkan kualitas indeks, tetapi juga cenderung memperpanjang waktu pengindeksan.[1, int_max]Tidak ada
    mJumlah kelompok sub-vektor untuk membagi vektor.[1, 65536]32
    nbitsJumlah bit yang dikuantisasi ke dalam setiap kelompok sub-vektor.[1, 24]8
    nrqJumlah subkuantisasi sisa.[1, 16]2
    refineApakah data yang disempurnakan dicadangkan selama pembangunan indeks.true, falsefalse
    refine_typeTipe data dari indeks penghalusan.SQ6, SQ8, BF16, FP16, FP32Tidak ada
  • Parameter pencarian

    ParameterDeskripsiRentangNilai Default
    efParameter yang mengendalikan pertukaran waktu kueri/akurasi. ef yang lebih tinggi akan menghasilkan pencarian yang lebih akurat namun lebih lambat.[top_k, int_max]Tidak ada
    refine_kFaktor pembesaran dari refine dibandingkan dengan k.[1, float_max] (1, float_max)1

BIN_FLAT

Indeks ini persis sama dengan FLAT kecuali bahwa ini hanya dapat digunakan untuk penyematan biner.

Untuk aplikasi pencarian kemiripan vektor yang membutuhkan akurasi sempurna dan bergantung pada dataset yang relatif kecil (skala jutaan), indeks BIN_FLAT adalah pilihan yang baik. BIN_FLAT tidak memampatkan vektor, dan merupakan satu-satunya indeks yang dapat menjamin hasil pencarian yang tepat. Hasil dari BIN_FLAT juga dapat digunakan sebagai titik perbandingan untuk hasil yang dihasilkan oleh indeks lain yang memiliki recall kurang dari 100%.

BIN_FLAT akurat karena menggunakan pendekatan menyeluruh untuk pencarian, yang berarti untuk setiap kueri, input target dibandingkan dengan vektor dalam kumpulan data. Hal ini membuat BIN_FLAT menjadi indeks paling lambat dalam daftar kami, dan tidak cocok untuk kueri data vektor yang sangat besar. Tidak ada parameter untuk indeks BIN_FLAT di Milvus, dan menggunakannya tidak memerlukan pelatihan data atau penyimpanan tambahan.

  • Parameter pencarian

    ParameterDeskripsiRange
    metric_type[Opsional] Metrik jarak yang dipilih.Lihat Metrik yang Didukung.

BIN_IVF_FLAT

Indeks ini persis sama dengan IVF_FLAT kecuali bahwa indeks ini hanya dapat digunakan untuk penyematan biner.

BIN_IVF_FLAT membagi data vektor ke dalam unit klaster nlist, lalu membandingkan jarak antara vektor input target dan pusat setiap klaster. Bergantung pada jumlah klaster yang diatur oleh sistem untuk melakukan kueri (nprobe), hasil pencarian kemiripan dikembalikan berdasarkan perbandingan antara input target dan vektor dalam klaster yang paling mirip saja - secara drastis mengurangi waktu kueri.

Dengan menyesuaikan nprobe, keseimbangan ideal antara akurasi dan kecepatan dapat ditemukan untuk skenario tertentu. Waktu kueri meningkat tajam seiring dengan meningkatnya jumlah vektor input target (nq), dan jumlah cluster yang dicari (nprobe).

BIN_IVF_FLAT adalah indeks BIN_IVF yang paling dasar, dan data yang disandikan yang disimpan di setiap unit konsisten dengan data aslinya.

  • Parameter pembuatan indeks

    ParameterDeskripsiRentang
    nlistJumlah unit cluster[1, 65536]
  • Parameter pencarian

    • Pencarian umum

      ParameterDeskripsiRentangNilai Default
      nprobeJumlah unit yang akan ditanyakan[1, nlist]8
    • Pencarian rentang

      ParameterDeskripsiRentangNilai Default
      max_empty_result_bucketsJumlah maksimum bucket yang tidak mengembalikan hasil pencarian.
      Ini adalah parameter pencarian rentang dan menghentikan proses pencarian ketika jumlah bucket kosong secara berurutan mencapai nilai yang ditentukan.
      Meningkatkan nilai ini dapat meningkatkan tingkat penarikan dengan mengorbankan waktu pencarian yang lebih lama.
      [1, 65535]2

SPARSE_INVERTED_INDEX

Setiap dimensi menyimpan daftar vektor yang memiliki nilai bukan nol pada dimensi tersebut. Selama pencarian, Milvus melakukan iterasi melalui setiap dimensi vektor kueri dan menghitung nilai untuk vektor yang memiliki nilai bukan nol pada dimensi tersebut.

  • Parameter pembuatan indeks

    ParameterDeskripsiRange
    inverted_index_algoAlgoritme yang digunakan untuk membangun dan menanyakan indeks. Untuk detailnya, lihat Vektor Jarang.DAAT_MAXSCORE (default), DAAT_WAND, TAAT_NAIVE

    Parameter drop_ratio_build sudah tidak digunakan lagi sejak Milvus v2.5.4, yang masih dapat diterima selama pembuatan indeks, tetapi tidak lagi berpengaruh pada indeks.

  • Parameter pencarian

    ParameterDeskripsiRange
    drop_ratio_searchProporsi nilai vektor kecil yang dikecualikan selama proses pencarian. Opsi ini memungkinkan penyempurnaan proses pencarian dengan menentukan rasio nilai terkecil dalam vektor kueri yang akan diabaikan. Opsi ini membantu menyeimbangkan ketepatan dan kinerja pencarian. Semakin kecil nilai yang ditetapkan untuk drop_ratio_search, semakin sedikit nilai kecil ini berkontribusi pada skor akhir. Dengan mengabaikan beberapa nilai kecil, kinerja pencarian dapat ditingkatkan dengan dampak minimal pada akurasi.[0, 1]

FAQ

Apa perbedaan antara indeks FLAT dan indeks IVF_FLAT?

Indeks IVF_FLAT membagi ruang vektor menjadi klaster nlist. Jika Anda mempertahankan nilai default nlist sebagai 16384, Milvus membandingkan jarak antara vektor target dan pusat dari semua 16384 klaster untuk mendapatkan nprobe klaster terdekat. Kemudian Milvus membandingkan jarak antara vektor target dan vektor dalam cluster yang dipilih untuk mendapatkan vektor terdekat. Tidak seperti IVF_FLAT, FLAT secara langsung membandingkan jarak antara vektor target dan setiap vektor.

Oleh karena itu, ketika jumlah total vektor kurang lebih sama dengan nlist, IVF_FLAT dan FLAT memiliki sedikit perbedaan dalam hal perhitungan yang diperlukan dan kinerja pencarian. Tetapi ketika jumlah vektor bertambah menjadi dua kali, tiga kali, atau n kali dari nlist, indeks IVF_FLAT mulai menunjukkan keuntungan yang semakin besar.

Lihat Cara Memilih Indeks di Milvus untuk informasi lebih lanjut.

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?