Memasukkan Entitas
Tema ini menjelaskan cara memasukkan data ke Milvus dari sisi klien.
Anda juga dapat menggunakan MilvusDM untuk memigrasikan data ke Milvus. MilvusDM adalah alat sumber terbuka yang dirancang khusus untuk mengimpor dan mengekspor data dengan Milvus.
Milvus 2.1 mendukung tipe data VARCHAR
untuk bidang skalar. Ketika membangun indeks untuk bidang skalar tipe VARCHAR, tipe indeks default adalah trie.
Contoh berikut memasukkan 2.000 baris data yang dihasilkan secara acak sebagai data contoh (contoh CLI Milvus menggunakan file CSV remote yang telah dibangun sebelumnya yang berisi data serupa). Aplikasi nyata mungkin menggunakan vektor berdimensi lebih tinggi daripada contoh ini. Anda dapat menyiapkan data sendiri untuk menggantikan contoh ini.
Menyiapkan Data
Pertama, siapkan data yang akan dimasukkan. Tipe data yang akan dimasukkan harus sesuai dengan skema koleksi, jika tidak Milvus akan memunculkan pengecualian.
Milvus mendukung nilai default untuk bidang skalar, kecuali bidang kunci utama. Ini berarti bahwa selama penambahan atau pembaruan data, beberapa bidang dapat dibiarkan kosong. Untuk informasi lebih lanjut, lihat pembuatan koleksi.
Setelah mengaktifkan skema dinamis, Anda dapat menambahkan bidang dinamis ke data. Untuk informasi lebih lanjut, lihat skema dinamis.
bookIDs := make([]int64, 0, 2000)
wordCounts := make([]int64, 0, 2000)
bookIntros := make([][]float32, 0, 2000)
for i := 0; i < 2000; i++ {
bookIDs = append(bookIDs, int64(i))
wordCounts = append(wordCounts, int64(i+10000))
v := make([]float32, 0, 2)
for j := 0; j < 2; j++ {
v = append(v, rand.Float32())
}
bookIntros = append(bookIntros, v)
}
idColumn := entity.NewColumnInt64("book_id", bookIDs)
wordColumn := entity.NewColumnInt64("word_count", wordCounts)
introColumn := entity.NewColumnFloatVector("book_intro", 2, bookIntros)
Memasukkan Data ke Milvus
Masukkan data ke dalam sebuah koleksi.
Dengan menentukan nama_partition
, Anda dapat memilih partisi mana untuk memasukkan data.
_, err = milvusClient.Insert(
context.Background(), // ctx
"book", // CollectionName
"", // partitionName
idColumn, // columnarData
wordColumn, // columnarData
introColumn, // columnarData
)
if err != nil {
log.Fatal("gagal memasukkan data:", err.Error())
}
Parameter | Deskripsi |
---|---|
ctx |
Konteks yang digunakan untuk mengontrol proses panggilan API. |
CollectionName |
Nama koleksi untuk memasukkan data. |
partitionName |
Nama partisi untuk memasukkan data. Jika dikosongkan, data akan dimasukkan ke dalam partisi default. |
columnarData |
Data yang akan dimasukkan ke setiap bidang. |
Setelah memasukkan entitas ke dalam koleksi yang sudah diindeks, Anda tidak perlu membuat indeks ulang koleksi karena Milvus akan secara otomatis membuat indeks untuk data yang baru dimasukkan.
Menyegarkan Data di Milvus
Ketika data dimasukkan ke Milvus, data dimasukkan ke dalam segment. Segmen harus mencapai ukuran tertentu untuk disegel dan diindeks. Segmen yang belum disegel akan diakses melalui pencarian kekerasan. Untuk menghindari situasi ini, sebaiknya panggil flush()
. Metode flush()
menutup segmen yang tersisa dan mengirimkannya ke indeks. Sangat penting untuk memanggil metode ini hanya saat sesi masukkan berakhir. Memanggil metode ini terlalu sering dapat mengakibatkan data terfragmentasi, yang nantinya perlu dibersihkan.
Batasan
Fitur | Batasan Maksimum |
---|---|
Dimensi Vektor | 32.768 |
Memperbarui Data
Persiapan Data
Pertama, siapkan data yang akan diperbarui. Jenis data yang akan diperbarui harus sesuai dengan skema koleksi, jika tidak, Milvus akan menghasilkan pengecualian.
Milvus mendukung nilai default untuk bidang skalar, kecuali untuk bidang kunci utama. Ini berarti bahwa selama proses penyisipan atau pembaruan data, beberapa bidang dapat tetap kosong. Untuk informasi lebih lanjut, silakan lihat pembuatan koleksi.
nEntities := 3000
dim := 8
idList := make([]int64, 0, nEntities)
randomList := make([]float64, 0, nEntities)
embeddingList := make([][]float32, 0, nEntities)
for i := 0; i < nEntities; i++ {
idList = append(idList, int64(i))
}
for i := 0; i < nEntities; i++ {
randomList = append(randomList, rand.Float64())
}
for i := 0; i < nEntities; i++ {
vec := make([]float32, 0, dim)
for j := 0; j < dim; j++ {
vec = append(vec, rand.Float32())
}
embeddingList = append(embeddingList, vec)
}
idColData := entity.NewColumnInt64("ID", idList)
randomColData := entity.NewColumnDouble("acak", randomList)
embeddingColData := entity.NewColumnFloatVector("embedding", dim, embeddingList)
Memperbarui Data
Perbarui data ke dalam koleksi.
if _, err := c.Upsert(ctx, collectionName, "", idColData, embeddingColData);
err != nil {
log.Fatalf("gagal memperbarui data, err: %v", err)
}