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 |
---|---|
|
|
Jenis Metrik | Jenis Indeks |
---|---|
|
|
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:
|
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
//