إدخال الكيانات

يصف هذا الموضوع كيفية إدخال البيانات إلى Milvus من الجانب العميل.

يمكنك أيضًا استخدام MilvusDM لنقل البيانات إلى Milvus. يعد MilvusDM أداة مفتوحة المصدر مصممة خصيصًا لاستيراد وتصدير البيانات مع Milvus.

يدعم Milvus 2.1 نوع البيانات VARCHAR لحقول القيم المنفردة. عند بناء فهرس لحقل من نوع VARCHAR، يكون نوع الفهرس الافتراضي نوعًا من الشجرة.

يقوم المثال التالي بإدخال 2000 صف من البيانات المولدة عشوائيًا كبيانات عينة (يستخدم مثال سطر الأوامر لـ Milvus ملف CSV عن بُعد مُبنيًا مسبقًا يحتوي على بيانات مماثلة). يمكن أن تستخدم التطبيقات الحقيقية متجهات ذات أبعاد أعلى من المثال. يمكنك إعداد بياناتك الخاصة لاستبدال المثال.

إعداد البيانات

أولاً، قم بإعداد البيانات التي ستُدرج. يجب أن يتطابق نوع البيانات المراد إدراجها مع مخطط المجموعة، وإلا فإن Milvus سيُلقي استثناءً.

يدعم Milvus القيم الافتراضية لحقول القيم المنفردة، باستثناء حقول المفتاح الرئيسي. وهذا يعني أنه يمكن ترك حقول معينة فارغة أثناء إدراج البيانات أو تحديثها. لمزيد من المعلومات، راجع إنشاء مجموعة.

بعد تمكين المخطط الديناميكي، يمكنك إضافة حقول ديناميكية إلى البيانات. لمزيد من المعلومات، راجع المخطط الديناميكي.

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)

إدراج البيانات في Milvus

قم بإدراج البيانات في مجموعة.

من خلال تحديد partition_name، يمكنك اختيار القسم الذي تُدرج البيانات فيه.

_, err = milvusClient.Insert(
	context.Background(), // ctx
	"book",               // CollectionName
	"",                   // partitionName
	idColumn,             // columnarData
	wordColumn,           // columnarData
	introColumn,          // columnarData
)
if err != nil {
	log.Fatal("failed to insert data:", err.Error())
}
المعلمة الوصف
ctx السياق المستخدم للتحكم في عملية الاستدعاء API.
CollectionName اسم المجموعة لإدراج البيانات فيها.
partitionName اسم القسم الذي سيُدرج فيه البيانات. إذا تركت فارغة، سيتم إدراج البيانات في القسم الافتراضي.
columnarData البيانات التي سيتم إدراجها في كل حقل.

بعد إدراج الكيانات في مجموعة تم فهرستها بالفعل، لا داعي لإعادة فهرسة المجموعة لأن Milvus ستقوم تلقائيًا بإنشاء فهرس للبيانات الجديدة المدرجة.

تحديث البيانات

تحضير البيانات

أولاً، قم بتحضير البيانات التي ستتم تحديثها. يجب أن يتطابق نوع البيانات المراد تحديثه مع مخطط النموذج الذي يتمتع به المجموعة، وإلا فإن Milvus سيُولِد استثناء.

يدعم Milvus القيم الافتراضية لحقول القيم العلمية، باستثناء حقول المفتاح الأساسي. وهذا يعني أنه يمكن لبعض الحقول أن تبقى فارغة خلال عملية إدراج البيانات أو تحديثها. لمزيد من المعلومات، يرجى الرجوع إلى إنشاء المجموعة.

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("المعرف", idList)
randomColData := entity.NewColumnDouble("عشوائي", randomList)
embeddingColData := entity.NewColumnFloatVector("تضمينات", dim, embeddingList)

تحديث البيانات

قم بتحديث البيانات في المجموعة.

if _, err := c.Upsert(ctx, collectionName, "", idColData, embeddingColData);
err != nil {
    log.Fatalf("فشل في تحديث البيانات، الخطأ: %v", err)
}