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

milvus-logo
LFAI
Beranda
  • Panduan Pengguna
  • Home
  • Docs
  • Panduan Pengguna

  • Indeks

  • Indeks Vektor

  • Bidang Vektor Indeks

Mengindeks Bidang Vektor

Panduan ini memandu Anda melalui operasi dasar dalam membuat dan mengelola indeks pada bidang vektor dalam koleksi.

Gambaran Umum

Dengan memanfaatkan metadata yang disimpan dalam berkas indeks, Milvus mengatur data Anda dalam struktur khusus, sehingga memudahkan pengambilan informasi yang diminta dengan cepat selama pencarian atau kueri.

Milvus menyediakan beberapa jenis indeks dan metrik untuk mengurutkan nilai bidang untuk pencarian kemiripan yang efisien. Tabel berikut mencantumkan jenis indeks dan metrik yang didukung untuk berbagai jenis bidang vektor. Saat ini, Milvus mendukung berbagai jenis data vektor, termasuk penyematan floating point (sering dikenal sebagai vektor floating point atau vektor padat), penyematan biner (juga dikenal sebagai vektor biner), dan penyematan jarang (juga dikenal sebagai vektor jarang). Untuk detailnya, lihat Indeks Dalam Memori dan Metrik Kemiripan.

Jenis Metrik Jenis Indeks
  • Jarak Euclidean (L2)
  • Produk dalam (IP)
  • Kemiripan kosinus (COSINE)
  • DATAR
  • IVF_FLAT
  • IVF_SQ8
  • IVF_PQ
  • GPU_IVF_FLAT
  • GPU_IVF_PQ
  • HNSW
  • DISKANN
Jenis Metrik Jenis Indeks
  • Jaccard (JACCARD)
  • Hamming (HAMMING)
  • BIN_FLAT
  • BIN_IVF_FLAT
Jenis Metrik Jenis Indeks
IP SPARSE_INVERTED_INDEX

Sejak Milvus 2.5.4 dan seterusnya, SPARSE_WAND tidak digunakan lagi. Sebagai gantinya, disarankan untuk menggunakan "inverted_index_algo": "DAAT_WAND" untuk kesetaraan dengan tetap menjaga kompatibilitas. Untuk informasi lebih lanjut, lihat Vektor Jarang.

Direkomendasikan untuk membuat indeks untuk bidang vektor dan bidang skalar yang sering diakses.

Persiapan

Seperti yang dijelaskan di Mengelola Koleksi, Milvus secara otomatis membuat indeks dan memuatnya ke dalam memori ketika membuat koleksi jika salah satu dari kondisi berikut ini ditentukan dalam permintaan pembuatan koleksi:

  • Dimensi bidang vektor dan tipe metrik, atau

  • Skema dan parameter indeks.

Cuplikan kode di bawah ini menggunakan kembali kode yang sudah ada untuk membuat koneksi ke instance Milvus dan membuat koleksi tanpa menentukan parameter indeksnya. Dalam kasus ini, koleksi tidak memiliki indeks dan tetap tidak dimuat.

Untuk mempersiapkan pengindeksan, gunakan MilvusClient untuk menyambung ke server Milvus dan menyiapkan koleksi dengan menggunakan create_schema(), add_field(), dan create_collection().

Untuk mempersiapkan pengindeksan, gunakan MilvusClientV2 untuk menyambung ke server Milvus dan menyiapkan koleksi dengan menggunakan createSchema(), addField(), , dan createCollection().

Untuk mempersiapkan pengindeksan, gunakan MilvusClient untuk menyambung ke server Milvus dan menyiapkan koleksi dengan menggunakan createCollection().

from pymilvus import MilvusClient, DataType

# 1. Set up a Milvus client
client = MilvusClient(
    uri="http://localhost:19530"
)

# 2. Create schema
# 2.1. Create schema
schema = MilvusClient.create_schema(
    auto_id=False,
    enable_dynamic_field=True,
)

# 2.2. Add fields to schema
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)

# 3. Create collection
client.create_collection(
    collection_name="customized_setup", 
    schema=schema, 
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.common.DataType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;

String CLUSTER_ENDPOINT = "http://localhost:19530";

// 1. Connect to Milvus server
ConnectConfig connectConfig = ConnectConfig.builder()
    .uri(CLUSTER_ENDPOINT)
    .build();

MilvusClientV2 client = new MilvusClientV2(connectConfig);

// 2. Create a collection

// 2.1 Create schema
CreateCollectionReq.CollectionSchema schema = client.createSchema();

// 2.2 Add fields to schema
schema.addField(AddFieldReq.builder().fieldName("id").dataType(DataType.Int64).isPrimaryKey(true).autoID(false).build());
schema.addField(AddFieldReq.builder().fieldName("vector").dataType(DataType.FloatVector).dimension(5).build());

// 3 Create a collection without schema and index parameters
CreateCollectionReq customizedSetupReq = CreateCollectionReq.builder()
.collectionName("customized_setup")
.collectionSchema(schema)
.build();

client.createCollection(customizedSetupReq);
// 1. Set up a Milvus Client
client = new MilvusClient({address, token});

// 2. Define fields for the collection
const fields = [
    {
        name: "id",
        data_type: DataType.Int64,
        is_primary_key: true,
        autoID: false
    },
    {
        name: "vector",
        data_type: DataType.FloatVector,
        dim: 5
    },
]

// 3. Create a collection
res = await client.createCollection({
    collection_name: "customized_setup",
    fields: fields,
})

console.log(res.error_code)  

// Output
// 
// Success
// 

Mengindeks Koleksi

Untuk membuat indeks untuk koleksi atau mengindeks koleksi, gunakan prepare_index_params() untuk menyiapkan parameter indeks dan create_index() untuk membuat indeks.

Untuk membuat indeks untuk koleksi atau mengindeks koleksi, gunakan IndexParam untuk menyiapkan parameter indeks dan createIndex() untuk membuat indeks.

Untuk membuat indeks untuk koleksi atau mengindeks koleksi, gunakan createIndex().

# 4.1. Set up the index parameters
index_params = MilvusClient.prepare_index_params()

# 4.2. Add an index on the vector field.
index_params.add_index(
    field_name="vector",
    metric_type="COSINE",
    index_type="IVF_FLAT",
    index_name="vector_index",
    params={ "nlist": 128 }
)

# 4.3. Create an index file
client.create_index(
    collection_name="customized_setup",
    index_params=index_params,
    sync=False # Whether to wait for index creation to complete before returning. Defaults to True.
)
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.index.request.CreateIndexReq;

// 4 Prepare index parameters

// 4.2 Add an index for the vector field "vector"
IndexParam indexParamForVectorField = IndexParam.builder()
    .fieldName("vector")
    .indexName("vector_index")
    .indexType(IndexParam.IndexType.IVF_FLAT)
    .metricType(IndexParam.MetricType.COSINE)
    .extraParams(Map.of("nlist", 128))
    .build();

List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);

// 4.3 Crate an index file
CreateIndexReq createIndexReq = CreateIndexReq.builder()
    .collectionName("customized_setup")
    .indexParams(indexParams)
    .build();

client.createIndex(createIndexReq);
// 4. Set up index for the collection
// 4.1. Set up the index parameters
res = await client.createIndex({
    collection_name: "customized_setup",
    field_name: "vector",
    index_type: "AUTOINDEX",
    metric_type: "COSINE",   
    index_name: "vector_index",
    params: { "nlist": 128 }
})

console.log(res.error_code)

// Output
// 
// Success
// 
Parameter Deskripsi
field_name Nama file target untuk menerapkan objek ini.
metric_type Algoritme yang digunakan untuk mengukur kemiripan antar vektor. Nilai yang memungkinkan adalah IP, L2, COSINE, JACCARD, HAMMING. Ini hanya tersedia jika bidang yang ditentukan adalah bidang vektor. Untuk informasi lebih lanjut, lihat Indeks yang didukung di Milvus.
index_type Nama algoritme yang digunakan untuk mengatur data dalam bidang tertentu. Untuk algoritma yang berlaku, lihat Indeks dalam memori dan Indeks pada disk.
index_name Nama file indeks yang dihasilkan setelah objek ini diterapkan.
params Parameter penyetelan untuk jenis indeks yang ditentukan. Untuk detail tentang kunci dan rentang nilai yang mungkin, lihat Indeks Dalam Memori.
collection_name Nama koleksi yang sudah ada.
index_params Objek IndexParams yang berisi daftar objek IndexParam.
sync Mengontrol bagaimana indeks dibuat terkait dengan permintaan klien. Nilai yang valid:
  • True (default): Klien menunggu hingga indeks selesai dibangun sebelum kembali. Ini berarti Anda tidak akan mendapatkan respons hingga proses selesai.
  • False: Klien segera kembali setelah permintaan diterima dan indeks sedang dibuat di latar belakang. Untuk mengetahui apakah pembuatan indeks telah selesai, gunakan metode describe_index().
Parameter Deskripsi
fieldName Nama bidang target untuk menerapkan objek IndexParam ini.
indexName Nama file indeks yang dihasilkan setelah objek ini diterapkan.
indexType Nama algoritme yang digunakan untuk menyusun data dalam bidang tertentu. Untuk algoritme yang berlaku, lihat Indeks Dalam Memori dan Indeks Pada Disk.
metricType Metrik jarak yang digunakan untuk indeks. Nilai yang memungkinkan adalah IP, L2, COSINE, JACCARD, HAMMING.
extraParams Parameter indeks tambahan. Untuk detailnya, lihat Indeks Dalam-memori dan Indeks On-disk.
Parameter Deskripsi
collection_name Nama koleksi yang sudah ada.
field_name Nama bidang untuk membuat indeks.
index_type Jenis indeks yang akan dibuat.
metric_type Jenis metrik yang digunakan untuk mengukur jarak vektor.
index_name Nama indeks yang akan dibuat.
params Parameter khusus indeks lainnya.

Catatan

Saat ini, Anda hanya dapat membuat satu file indeks untuk setiap bidang dalam koleksi.

Memeriksa Detail Indeks

Setelah Anda membuat indeks, Anda dapat memeriksa rinciannya.

Untuk memeriksa rincian indeks, gunakan list_indexes() untuk membuat daftar nama indeks dan describe_index() untuk mendapatkan rincian indeks.

Untuk memeriksa detail indeks, gunakan describeIndex() untuk mendapatkan detail indeks.

Untuk memeriksa detail indeks, gunakan describeIndex() untuk mendapatkan detail indeks.

# 5. Describe index
res = client.list_indexes(
    collection_name="customized_setup"
)

print(res)

# Output
#
# [
#     "vector_index",
# ]

res = client.describe_index(
    collection_name="customized_setup",
    index_name="vector_index"
)

print(res)

# Output
#
# {
#     "index_type": ,
#     "metric_type": "COSINE",
#     "field_name": "vector",
#     "index_name": "vector_index"
# }
import io.milvus.v2.service.index.request.DescribeIndexReq;
import io.milvus.v2.service.index.response.DescribeIndexResp;

// 5. Describe index
// 5.1 List the index names
ListIndexesReq listIndexesReq = ListIndexesReq.builder()
    .collectionName("customized_setup")
    .build();

List<String> indexNames = client.listIndexes(listIndexesReq);

System.out.println(indexNames);

// Output:
// [
//     "vector_index"
// ]

// 5.2 Describe an index
DescribeIndexReq describeIndexReq = DescribeIndexReq.builder()
    .collectionName("customized_setup")
    .indexName("vector_index")
    .build();

DescribeIndexResp describeIndexResp = client.describeIndex(describeIndexReq);

System.out.println(JSONObject.toJSON(describeIndexResp));

// Output:
// {
//     "metricType": "COSINE",
//     "indexType": "AUTOINDEX",
//     "fieldName": "vector",
//     "indexName": "vector_index"
// }
// 5. Describe the index
res = await client.describeIndex({
    collection_name: "customized_setup",
    index_name: "vector_index"
})

console.log(JSON.stringify(res.index_descriptions, null, 2))

// Output
// 
// [
//   {
//     "params": [
//       {
//         "key": "index_type",
//         "value": "AUTOINDEX"
//       },
//       {
//         "key": "metric_type",
//         "value": "COSINE"
//       }
//     ],
//     "index_name": "vector_index",
//     "indexID": "449007919953063141",
//     "field_name": "vector",
//     "indexed_rows": "0",
//     "total_rows": "0",
//     "state": "Finished",
//     "index_state_fail_reason": "",
//     "pending_index_rows": "0"
//   }
// ]
// 

Anda dapat memeriksa berkas indeks yang dibuat pada bidang tertentu, dan mengumpulkan statistik jumlah baris yang diindeks menggunakan berkas indeks ini.

Membuang Indeks

Anda dapat dengan mudah membuang indeks jika sudah tidak diperlukan lagi.

Sebelum membuang indeks, pastikan indeks tersebut telah dirilis terlebih dahulu.

Untuk membuang indeks, gunakan perintah drop_index().

Untuk menjatuhkan indeks, gunakan dropIndex().

Untuk menjatuhkan indeks, gunakan dropIndex().

# 6. Drop index
client.drop_index(
    collection_name="customized_setup",
    index_name="vector_index"
)
// 6. Drop index

DropIndexReq dropIndexReq = DropIndexReq.builder()
    .collectionName("customized_setup")
    .indexName("vector_index")
    .build();

client.dropIndex(dropIndexReq);
// 6. Drop the index
res = await client.dropIndex({
    collection_name: "customized_setup",
    index_name: "vector_index"
})

console.log(res.error_code)

// Output
// 
// Success
// 

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?