Topik ini menjelaskan cara membuat indeks pada bidang vektor di Milvus untuk mempercepat pencarian kesamaan. Indeks vektor menggunakan skema indeks canggih dan algoritma seperti Inverted File (IVF) serta Hierarchical Navigable Small World (HNSW). Indeks ini menekan ruang vektor dan mempercepat pencarian titik data yang paling mirip dalam set data besar. Proses ini secara signifikan meningkatkan tingkat recall dan kecepatan tanggapan untuk aplikasi seperti pengenalan gambar, pengambilan suara, dan sistem rekomendasi.
Informasi latar belakang
Milvus mendukung berbagai jenis indeks untuk pengambilan kesamaan yang efisien. Ini menyediakan tiga metrik untuk menghitung jarak antar vektor: Cosine Similarity (COSINE), Euclidean Distance (L2), dan Inner Product (IP). Anda dapat membuat indeks pada bidang vektor dan skalar yang sering di-query untuk mengoptimalkan kinerja pengambilan.
Prasyarat
Anda telah menginstal pustaka PyMilvus di klien lokal Anda dan memperbaruinya ke versi terbaru.
Jika Anda belum menginstal pustaka PyMilvus atau perlu memperbaruinya, jalankan perintah berikut:
pip install --upgrade pymilvusAnda telah membuat instans Milvus. Untuk informasi lebih lanjut, lihat Buat Instans Milvus.
Persiapan
Sebelum mengelola indeks, Anda perlu membuat koleksi terlebih dahulu. Ada dua pendekatan untuk membuat koleksi:
Opsi 1: Buat Koleksi dengan Indeks
Jika Anda ingin membuat dan memuat indeks saat membuat koleksi, Anda perlu:
Deklarasikan dimensi dari bidang vektor (
dimension)Berikan parameter terkait indeks (termasuk
metric_typedan konfigurasi indeks)
Opsi 2: Buat Koleksi Tanpa Indeks
Potongan kode berikut menggunakan pendekatan ini, sehingga koleksi yang dibuat tidak akan berisi indeks dan tidak akan dimuat otomatis ke dalam memori:
from pymilvus import MilvusClient, DataType
client = MilvusClient(
uri="http://c-xxxx.milvus.aliyuncs.com:19530", # Titik akhir publik dari instans Milvus.
token="<yourUsername>:<yourPassword>", # Nama pengguna dan kata sandi untuk instans Milvus.
db_name="default" # Nama database yang akan dihubungkan. Contoh ini menggunakan database default.
)
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vec", datatype=DataType.FLOAT_VECTOR, dim=5)
client.create_collection(
collection_name="<yourCollectionName>",
schema=schema,
)
Buat indeks
Untuk membuat indeks, panggil fungsi create_index dan masukkan parameter index_params yang telah didefinisikan.
index_params = MilvusClient.prepare_index_params()
# Tentukan parameter indeks.
index_params.add_index(
field_name="vec", # Tentukan nama bidang vektor, seperti "vec".
metric_type="L2", # Tetapkan tipe metrik, seperti L2.
index_type="IVF_PQ", # Tetapkan tipe indeks, seperti IVF_PQ.
index_name="vector_index" # Tetapkan nama indeks sesuai kebutuhan.
)
# Buat indeks.
client.create_index(
collection_name="<yourCollectionName>",
index_params=index_params
)
Lihat indeks
res = client.describe_index(
collection_name="<yourCollectionName>",
index_name="<yourIndexName>"
)
print(res)
Hapus indeks
client.drop_index(
collection_name="<yourCollectionName>",
index_name="<yourIndexName>"
)