All Products
Search
Document Center

Vector Retrieval Service for Milvus:Pengantar cepat untuk pencarian vektor

Last Updated:Sep 24, 2025

Pencarian vektor adalah teknologi utama untuk pencarian kesamaan yang efisien. Topik ini menunjukkan cara melakukan pencarian vektor dengan cepat menggunakan contoh-contoh terperinci.

Prasyarat

  • Anda telah menginstal pustaka PyMilvus di klien lokal Anda dan memperbaruinya ke versi terbaru.

    Jika belum menginstal pustaka PyMilvus atau perlu memperbaruinya, jalankan perintah berikut.

    pip install --upgrade pymilvus
  • Anda telah membuat instans Milvus. Untuk informasi lebih lanjut, lihat Buat Instans Milvus.

Pertimbangan

Vector Retrieval Service for Milvus (Milvus) mendukung koneksi melalui jaringan internal dan Internet. Sebelum terhubung ke instans Milvus, pastikan klien Anda memiliki izin akses jaringan yang diperlukan. Untuk informasi lebih lanjut, lihat Konfigurasi Akses Jaringan.

Prosedur

Langkah 1: Terhubung ke instans Milvus

Gunakan kode berikut untuk terhubung ke instans Milvus.

from pymilvus import MilvusClient

# Buat klien Milvus.
client = MilvusClient(
    uri="http://c-xxxx.milvus.aliyuncs.com:19530",  # Titik akhir publik dari instans Milvus.
    token="<yourUsername>:<yourPassword>",  # Nama pengguna dan kata sandi yang digunakan untuk otentikasi dengan instans Milvus.
    db_name="default"  # Nama database target. Defaultnya adalah "default".
)

Langkah 2: Buat koleksi

Gunakan kode berikut untuk membuat koleksi. Untuk informasi lebih lanjut tentang parameter kustom, lihat Kelola Koleksi.

client.create_collection(
    collection_name="demo",  # Nama koleksi.
    dimension=5  # Dimensi vektor.
)

Kode ini menetapkan nama koleksi dan dimensi vektor serta menerapkan konfigurasi default berikut:

  • Bidang kunci utama bernama id dan bidang vektor bernama vector.

  • Properti metric_type disetel ke COSINE.

  • Bidang kunci utama id adalah bilangan bulat non-otomatis bertambah.

  • Bidang tambahan $meta menyimpan data untuk bidang yang tidak didefinisikan dalam skema sebagai pasangan kunci-nilai.

Langkah 3: Sisipkan data

Setelah koleksi dibuat, sistem secara otomatis memuat koleksi dan indeksnya ke dalam memori. Gunakan kode berikut untuk menyisipkan data uji ke dalam koleksi.

Sisipkan sejumlah kecil data

Kode ini menyisipkan 10 entitas yang telah ditentukan sebelumnya. Setiap entitas memiliki vektor tetap dan label warna.

data=[{'id': 0, 'vector': [-0.493313706583155, -0.172001225836391, 0.16825615330139554, -0.0198911518739604, -0.9756816265213708], 'color': 'green_5760'}, {'id': 1, 'vector': [0.6695699219225086, 0.49952523907354496, -0.49870548178008534, 0.8824655547230731, -0.7182693622931615], 'color': 'blue_2330'}, {'id': 2, 'vector': [-0.6057771959702387, 0.9141473782193543, 0.32053983678483466, -0.32126010092015655, 0.725222856037071], 'color': 'grey_9673'}, {'id': 3, 'vector': [0.14082089434165868, 0.9924029949938447, 0.7943279666144052, -0.7898608705081103, -0.9941425813199956], 'color': 'white_2829'}, {'id': 4, 'vector': [-0.46180540826224026, 0.33216876051895783, 0.5786699695956004, 0.8891120357625131, 0.04872530176990697], 'color': 'pink_9061'}, {'id': 5, 'vector': [-0.6097452740606673, 0.35648319550551144, -0.5699789153006387, 0.15085357921088316, -0.8817226997144627], 'color': 'pink_8525'}, {'id': 6, 'vector': [0.7843522543512762, -0.7663837586858071, -0.8681839054724569, 0.6880645348647785, -0.5151293183261791], 'color': 'green_5016'}, {'id': 7, 'vector': [-0.9967116931989293, 0.5741923070732655, -0.019126124261334976, -0.34163875885482753, -0.8189843931354175], 'color': 'brown_7434'}, {'id': 8, 'vector': [0.7347243385915765, -0.7358853080124825, -0.23737428377511716, 0.06980552357261627, -0.30613964550461437], 'color': 'blue_5059'}, {'id': 9, 'vector': [-0.21187155428455862, -0.3288541717216129, -0.32564136453418824, -0.14054963599686743, 0.5491320339870627], 'color': 'yellow_9887'}]

res = client.insert(
    collection_name="demo",
    data=data
)

Sisipkan lebih banyak data

Kode ini menggunakan pemahaman daftar untuk menghasilkan beberapa entitas. Vektor dan label warna untuk entitas ini dihasilkan secara acak.

import random

colors = ["green", "blue", "yellow", "red", "black", "white", "purple", "pink", "orange", "brown", "grey"]
data = [ {
    "id": i, 
    "vector": [ random.uniform(-1, 1) for _ in range(5) ], 
    "color": f"{random.choice(colors)}_{str(random.randint(1000, 9999))}" 
} for i in range(1000) ]

res = client.insert(
    collection_name="demo",
    data=data[1:]
)

print(res)

Langkah 4: Lakukan pencarian vektor

Penting

Penyisipan data adalah proses asinkron. Indeks pencarian tidak diperbarui segera setelah Anda menyisipkan data. Untuk menanyakan data terbaru, tunggu beberapa detik agar indeks diperbarui sebelum melakukan pencarian.

Pencarian vektor tunggal

Anda dapat melakukan pencarian kesamaan untuk satu vektor dengan memberikan vektor kueri.

query_vectors = [
[-0.8832567462711804, -0.2999882617491647, 0.9921295273224382, -0.272575369985379, -0.688914679645338]
]

res = client.search(
    collection_name="demo",     # Koleksi untuk dikueri.
    data=query_vectors,                # Vektor kueri.
    limit=3,                           # Jumlah entitas yang akan dikembalikan.
)

print(res)

Pencarian vektor batch

Anda dapat melakukan pencarian kesamaan batch dengan memberikan daftar vektor kueri.

query_vectors = [
[0.06586461994037252, 0.7693023529849932, 0.8199991781350795, -0.6988017611187176, 0.408383847889378],
[0.8988257992203861, 0.021911711196309414, 0.19086900086430836, 0.63590610476426, -0.6713237387993141]
]

res = client.search(
    collection_name="demo",
    data=query_vectors,
    limit=3,
)

print(res)

Langkah 5: Cari dengan filter

Anda dapat menggunakan bidang yang didefinisikan dalam skema untuk menetapkan kondisi filter. Ini mempersempit ruang lingkup pencarian dan meningkatkan efisiensi pencarian.

Filter berdasarkan bidang numerik

Contoh berikut menunjukkan cara memfilter berdasarkan rentang numerik dari bidang id.

query_vectors = [
[-0.30932351869632435, -0.7132856078639205, 0.6006201320181415, 0.40140510356426784, -0.21223937444001328]
]

res = client.search(
    collection_name="demo",
    data=query_vectors,
    filter="3 < id < 5",  # Filter untuk ID dalam rentang (3, 5).
    limit=3
)

print(res)

Filter berdasarkan bidang metadata ($meta)

Contoh berikut menunjukkan cara mencari catatan di mana properti color dimulai dengan "green". Contoh ini juga menentukan bahwa bidang color disertakan dalam keluaran.

query_vectors = [
[0.9636568288732006, -0.5900490884830603, 0.2504591754023724, 0.7120903924474389, 0.7620604497390009]
]

res = client.search(
    collection_name="demo",
    data=query_vectors,
    filter='$meta["color"] like "green%"',  # Filter untuk catatan di mana metadata 'color' dimulai dengan "green".
    limit=3,
    output_fields=["color"]   # Menentukan bidang mana yang akan dikembalikan dalam keluaran.
)

print(res)