Chèn thực thể
Chủ đề này mô tả cách chèn dữ liệu vào Milvus từ phía máy khách.
Bạn cũng có thể sử dụng MilvusDM để di dời dữ liệu đến Milvus. MilvusDM là một công cụ mã nguồn mở được thiết kế đặc biệt để nhập và xuất dữ liệu với Milvus.
Milvus 2.1 hỗ trợ kiểu dữ liệu VARCHAR
cho các trường scalar. Khi xây dựng chỉ mục cho trường scalar kiểu VARCHAR, loại chỉ mục mặc định là trie.
Ví dụ sau chèn 2.000 dòng dữ liệu được tạo ngẫu nhiên làm dữ liệu mẫu (ví dụ Milvus CLI sử dụng một tệp CSV từ xa đã được xây dựng trước chứa dữ liệu tương tự). Ứng dụng thực tế có thể sử dụng các vector có số chiều cao hơn so với ví dụ. Bạn có thể chuẩn bị dữ liệu của riêng mình để thay thế ví dụ.
Chuẩn bị dữ liệu
Trước hết, chuẩn bị dữ liệu để chèn. Loại dữ liệu của dữ liệu cần chèn phải phù hợp với schema của bộ sưu tập, nếu không Milvus sẽ ném một ngoại lệ.
Milvus hỗ trợ giá trị mặc định cho các trường scalar, ngoại trừ các trường khóa chính. Điều này có nghĩa là trong quá trình chèn dữ liệu hoặc cập nhật, một số trường có thể được để trống. Để biết thêm thông tin, xem tạo bộ sưu tập.
Sau khi bật schema động, bạn có thể thêm các trường động vào dữ liệu. Để biết thêm thông tin, xem schema động.
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)
Chèn dữ liệu vào Milvus
Chèn dữ liệu vào bộ sưu tập.
Bằng cách chỉ định partition_name
, bạn có thể chọn phân vùng để chèn dữ liệu vào.
_, err = milvusClient.Insert(
context.Background(), // ctx
"book", // TênCollection
"", // partitionName
idColumn, // columnarData
wordColumn, // columnarData
introColumn, // columnarData
)
if err != nil {
log.Fatal("thất bại khi chèn dữ liệu:", err.Error())
}
Tham số | Mô tả |
---|---|
ctx |
Ngữ cảnh được sử dụng để kiểm soát quá trình gọi API. |
CollectionName |
Tên của bộ sưu tập để chèn dữ liệu vào. |
partitionName |
Tên phân vùng để chèn dữ liệu vào. Nếu để trống, dữ liệu sẽ được chèn vào phân vùng mặc định. |
columnarData |
Dữ liệu cần chèn vào mỗi trường. |
Sau khi chèn các thực thể vào một bộ sưu tập đã được tạo chỉ mục, bạn không cần phải tạo lại chỉ mục cho bộ sưu tập vì Milvus s
Chuẩn bị Dữ liệu
Đầu tiên, chuẩn bị dữ liệu để cập nhật. Kiểu dữ liệu cần được cập nhật phải phù hợp với cấu trúc của bộ sưu tập, nếu không Milvus sẽ ném ra một ngoại lệ.
Milvus hỗ trợ giá trị mặc định cho các trường có giá trị vô hướng, ngoại trừ các trường khóa chính. Điều này có nghĩa là trong quá trình chèn hoặc cập nhật dữ liệu, một số trường có thể được để trống. Để biết thêm thông tin, vui lòng tham khảo phần tạo bộ sưu tập.
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("random", randomList)
embeddingColData := entity.NewColumnFloatVector("embeddings", dim, embeddingList)
Cập nhật Dữ liệu
Cập nhật dữ liệu vào bộ sưu tập.
if _, err := c.Upsert(ctx, collectionName, "", idColData, embeddingColData);
err != nil {
log.Fatalf("cập nhật dữ liệu thất bại, lỗi: %v", err)
}