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)
}