Membangun Indeks Vektor

Panduan ini menjelaskan cara membangun indeks vektor di Milvus.

Indeks vektor adalah unit organisasi metadata yang digunakan untuk mempercepat pencarian kesamaan vektor. Tanpa membangun indeks pada vektor, Milvus akan melakukan pencarian secara paksa.

Secara default, Milvus tidak mengindeks segmen dengan kurang dari 1.024 baris.

Contoh berikut menggambarkan pembangunan indeks IVF_FLAT dengan 1024 cluster menggunakan jarak Euclidean (L2). Anda dapat memilih jenis indeks dan metrik yang sesuai dengan skenario Anda.

Menyiapkan Parameter Indeks

Ikuti langkah-langkah berikut untuk menyiapkan parameter indeks:

index_params = {
  "metric_type":"L2",
  "index_type":"IVF_FLAT",
  "params":{"nlist":1024}
}
Parameter Deskripsi Pilihan
metric_type Jenis metrik yang digunakan untuk mengukur kesamaan vektor. Untuk vektor floating-point:- L2 (Jarak Euclidean)- IP (produk dalam)- COSINE (kesamaan kosinus)Untuk vektor biner:- JACCARD (Jarak Jaccard)- HAMMING (Jarak Hamming)
index_type Jenis indeks yang digunakan untuk mempercepat pencarian vektor. Untuk vektor floating-point:- FLAT (FLAT)- IVF_FLAT (IVF_FLAT)- IVF_SQ8 (IVF_SQ8)- IVF_PQ (IVF_PQ)- GPU_IVF_FLAT* (GPU_IVF_FLAT)- GPU_IVF_PQ*> (GPU_IVF_PQ)- HNSW (HNSW)- DISKANN* (DISKANN)Untuk vektor biner:- BIN_FLAT (BIN_FLAT)- BIN_IVF_FLAT (BIN_IVF_FLAT)
params Parameter konstruksi spesifik untuk indeks. Untuk informasi lebih lanjut, lihat Pencarian di Memori dan Pada Disk.
  • DISKANN memiliki prasyarat tertentu. Untuk informasi lebih lanjut, lihat Pencarian Pada Disk.
  • GPU_IVF_FLAT dan GPU_IVF_PQ hanya tersedia dalam instalasi Milvus dengan dukungan GPU diaktifkan.

Membangun Indeks

Bangun indeks dengan menentukan nama bidang vektor dan parameter indeks.

from pymilvus import Collection, utility
collection = Collection("book")
collection.create_index(
  field_name="book_intro",
  index_params=index_params
)

utility.index_building_progress("book")

Parameter Deskripsi
field_name Nama bidang vektor di mana indeks dibangun.
index_params Parameter dari indeks yang akan dibangun.

Membangun Indeks Skalar

Berbeda dengan vektor, skalar hanya memiliki besaran dan tidak memiliki arah. Milvus mempertimbangkan angka dan string individu sebagai skalar. Berikut adalah daftar jenis data yang tersedia untuk bidang skalar dalam Milvus.

Mulai dari Milvus v2.1.0, untuk mempercepat penyaringan atribut dalam pencarian hibrid, Anda dapat membangun indeks pada bidang skalar. Anda dapat membaca lebih lanjut tentang indeks bidang skalar di sini.

Catatan: Tautan untuk "di sini" harus diganti dengan tautan aktual yang ditentukan dalam dokumen asli.

Membangun Indeks

Saat membangun indeks pada bidang skalar, Anda tidak perlu mengatur parameter indeks apa pun. Nilai default untuk nama indeks dari bidang skalar adalah default_idx, diikuti oleh nama bidang yang diindeks. Anda dapat mengatur nilainya menjadi nilai lain yang sesuai jika Anda ingin.

Potongan kode berikut mengasumsikan bahwa koleksi bernama book sudah ada dan indeks perlu dibuat pada bidang string book_name.

from pymilvus import Collection

collection = Collection("book")   
collection.create_index(
  field_name="book_name", 
  index_name="scalar_index",
)
collection.load()

Setelah indeks dibuat, Anda dapat menyertakan ekspresi boolean untuk bidang string ini dalam pencarian kesamaan vektor, seperti yang ditunjukkan di bawah ini:

search_param = {
  "data": [[0.1, 0.2]],
  "anns_field": "book_intro",
  "param": {"metric_type": "L2", "params": {"nprobe": 10}},
  "limit": 2,
  "expr": "book_name like \"Hello%\"", 
}
res = collection.search(**search_param)

Menghapus Indeks

from pymilvus import Collection
collection = Collection("book")      # Dapatkan koleksi yang sudah ada.
collection.drop_index()