All Products
Search
Document Center

Vector Retrieval Service for Milvus:Cepat mengimplementasikan pencarian vektor

Last Updated:Aug 20, 2026

Pencarian vektor merupakan teknologi utama untuk pencarian kemiripan yang efisien. Topik ini menjelaskan cara cepat mengimplementasikan pencarian vektor dengan contoh terperinci.

Prasyarat

  • Pustaka PyMilvus telah diinstal pada client lokal Anda dan diperbarui ke versi terbaru.

    Untuk menginstal atau memperbarui pustaka PyMilvus, jalankan perintah berikut.

    pip install --upgrade pymilvus
  • Sebuah instans Milvus telah dibuat. Untuk informasi selengkapnya, lihat Create a Milvus instance.

Catatan

Alibaba Cloud AISearch for Milvus (Milvus) mendukung koneksi melalui jaringan internal dan Internet. Sebelum menghubungkan ke instans Milvus, pastikan client Anda memiliki izin akses jaringan yang diperlukan. Untuk informasi selengkapnya, lihat Network access and security settings.

Prosedur

Langkah 1: Hubungkan ke instans Milvus

Anda dapat menggunakan kode berikut untuk menghubungkan ke instans Milvus.

from pymilvus import MilvusClient

# Create a Milvus client.
client = MilvusClient(
    uri="http://c-xxxx.milvus.aliyuncs.com:19530",  # The public endpoint of the Milvus instance.
    token="<yourUsername>:<yourPassword>",  # The username and password to log on to the Milvus instance.
    db_name="default"  # The name of the database to connect to. This example uses the default database.
)

Langkah 2: Buat koleksi

Anda dapat menggunakan kode berikut untuk membuat koleksi. Untuk opsi parameter kustom lainnya, lihat Manage collections.

client.create_collection(
    collection_name="demo",  # The name of the collection.
    dimension=5  # The vector dimensions.
)

Kode ini menetapkan nama koleksi dan dimensi vektor, serta secara otomatis menerapkan konfigurasi berikut:

  • Menggunakan nama default untuk bidang kunci primer "id" dan bidang vektor "vector".

  • Properti "metric_type" menggunakan tipe metrik COSINE secara default.

  • Menetapkan bidang kunci primer "id" sebagai bilangan bulat dengan nilai yang tidak bertambah secara otomatis.

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

Langkah 3: Masukkan data

Setelah koleksi dibuat, sistem secara otomatis memuat koleksi dan indeksnya ke dalam memori. Anda dapat menggunakan kode berikut untuk memasukkan data uji ke dalam koleksi.

Masukkan jumlah data kecil

Kode ini memasukkan 10 entitas yang telah ditentukan sebelumnya. Setiap entitas memiliki vektor tetap dan tag 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
)

Masukkan lebih banyak data

Kode ini menggunakan list comprehension untuk menghasilkan banyak entitas secara dinamis. Vektor dan tag warna entitas tersebut dihasilkan secara acak dalam rentang tertentu.

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: Pencarian vektor

Penting

Pemasukan data merupakan proses asinkron. Setelah data dimasukkan, sistem tidak langsung memperbarui indeks pencarian. Untuk mengkueri data terbaru, Anda harus menunggu beberapa detik hingga indeks diperbarui sebelum melakukan pencarian.

Pencarian vektor tunggal

Untuk melakukan pencarian kemiripan, Anda dapat memberikan daftar yang berisi satu vektor kueri.

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

res = client.search(
    collection_name="demo",     # The collection to query
    data=query_vectors,                # The query vectors.
    limit=3,                           # The number of entities to return.
)

print(res)

Pencarian vektor batch

Untuk pencarian batch dengan beberapa vektor kueri, Anda dapat menggunakan daftar vektor sebagai parameter input. Kode berikut memberikan contohnya.

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: Pencarian terfilter

Anda dapat menggunakan bidang yang didefinisikan dalam skema untuk menetapkan kondisi filter. Hal ini mempersempit cakupan pencarian dan meningkatkan efisiensi pencarian.

Filter berdasarkan bidang numerik

Contoh berikut menunjukkan cara melakukan filter berdasarkan rentang nilai 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",  # The filter condition for a numeric field range.
    limit=3
)

print(res)

Filter berdasarkan bidang metadata ($meta)

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

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%"',  # The filter condition to match a metadata field property value.
    limit=3,
    output_fields=["color"]   # The fields to include in the returned results.
)

print(res)