یہ باب تفصیلات پیش کرتا ہے کے گو کا استعمال کر کے Milvus ویکٹر ڈیٹا بیس کے پڑھنے اور لکھنے کی عملیات میں تیزی سے کیسے شروع کیا جائے۔

گو ایس ڈی کو انسٹال کرنا

نوٹ: گو ایس ڈی کے استعمال کے لئے گو ورژن 1.15 یا اس سے زیادہ درکار ہے۔

go get -u github.com/milvus-io/milvus-sdk-go/v2

دوسرے اجزاء شامل کرنا

import (
	"context"
	"fmt"
	"log"
	"math/rand"
	"time"

	"github.com/milvus-io/milvus-sdk-go/v2/client"
	"github.com/milvus-io/milvus-sdk-go/v2/entity"
)

Milvus ڈیٹا بیس سے منسلک ہونا

	ctx := context.Background()

	log.Printf(msgFmt, "Milvus سے منسلک ہونا")
	c, err := client.NewClient(ctx, client.Config{
		Address: "localhost:19530",
	})
	if err != nil {
		log.Fatal("Milvus سے منسلک ہونے میں ناکام، خرابی:", err.Error())
	}
	defer c.Close()

کلیکشن بنانا

کسٹمردارانہ بات یہ ہے کے کلیکشن بنانے کا عملہ مائیکروسافٹ ایکسیس کے ٹیبل ڈزائن کرنے جیسا ہے، جہاں آپ کو ہر فیلڈ کی قسم بیان کرنی ہوگی۔

	collectionName = "hello_tizi365"
	log.Printf(msgFmt, fmt.Sprintf("کلیکشن بنا رہا ہے, `%s`", collectionName))
	
	// کلیکشن کے فیلڈ کے قسم تعین کریں، یہاں ID، رینڈم، اور ایمبیڈنگ فیلڈز کا تعین کیا گیا ہے
	schema := entity.NewSchema().WithName(collectionName).WithDescription("کلیکشن کی وضاحت").
		WithField(entity.NewField().WithName("ID").WithDataType(entity.FieldTypeInt64).WithIsPrimaryKey(true).WithIsAutoID(false)).
		WithField(entity.NewField().WithName("random").WithDataType(entity.FieldTypeDouble)).
		WithField(entity.NewField().WithName("embeddings").WithDataType(entity.FieldTypeFloatVector).WithDim(dim))

	// مرتب کردہ کلیکشن سے کلیکشن بنائیں
	if err := c.CreateCollection(ctx, schema, entity.DefaultShardNumber); err != nil {
		log.Fatalf("کلیکشن بنانے میں ناکام، خرابی: %v", err)
	}

کلیکشن میں ڈیٹا اندراج کرنا

	idList, randomList := make([]int64, 0, nEntities), make([]float64, 0, nEntities)
	embeddingList := make([][]float32, 0, nEntities)

	rand.Seed(time.Now().UnixNano())

    // ٹیسٹنگ کے مقصد کے لئے، یہاں کچھ رینڈم ٹیسٹ ڈیٹا پیدا کریں
	// شناختینی بنائیں
	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)

    // ڈیٹا اندراج کریں
	if _, err := c.Insert(ctx, collectionName, "", idColData, randomColData, embeddingColData); err != nil {
		log.Fatalf("ڈیٹا لکھنے میں ناکام، خرابی: %v", err)
	}
    
	// ڈیٹا کو ڈسک پر فرسٹ کریں
	if err := c.Flush(ctx, collectionName, false); err != nil {
		log.Fatalf("ڈیٹا فرسٹ کرنے میں ناکام، خرابی: %v", err)
	}

انڈیکس بنانا

	// انڈیکس کی قسم تعین کریں
	idx, err := entity.NewIndexIvfFlat(entity.L2, 128)
	if err != nil {
		log.Fatalf("انڈیکس تعین کرنے میں ناکام، خرابی: %v", err)
	}
	// مخصوص کلیکشن کے لئے انڈیکس بنائیں
	if err := c.CreateIndex(ctx, collectionName, embeddingCol, idx, false); err != nil {
		log.Fatalf("انڈیکس بنانے میں ناکام، خرابی: %v", err)
	}

    // مخصوص کلیکشن کو میموری میں لوڈ کریں تاکہ سوال کرنے کی کارکردگی بہتر ہو
	err = c.LoadCollection(ctx, collectionName, false)
	if err != nil {
		log.Fatalf("کلیکشن لوڈ کرنے میں ناکام، خرابی: %v", err)
	}
// تلاش کے لیے برادرہ کو تیار کریں. یہاں ہم فٹور ڈیٹا کو پیشے سے تجربے کے لئے فٹور ڈیٹا کا حصہ باہر نکالتے ہیں اور ہم نیچے دیؓ ہوئی فٹور کی طرح کے نتائج کی تلاش کریں گے۔
vec2search := []entity.Vector{
    entity.FloatVector(embeddingList[len(embeddingList)-2]),
    entity.FloatVector(embeddingList[len(embeddingList)-1]),
}
begin := time.Now()
sp, _ := entity.NewIndexIvfFlatSearchParam(16)
// فٹور مماثلت تلاش کریں
sRet, err := c.Search(ctx, collectionName, nil, "", []string{"random"}, vec2search,
    "embeddings", entity.L2, topK, sp)
end := time.Now()
if err != nil {
    log.Fatalf("تلاش ناکام ہوئی, خرابی: %v", err)
}

log.Println("نتائج چھاپیں:")
for _, res := range sRet {
    printResult(&res)
}

printResult فنکشن کی تعریف

func printResult(sRet *client.SearchResult) {
    randoms := make([]float64, 0, sRet.ResultCount)
    scores := make([]float32, 0, sRet.ResultCount)

    var randCol *entity.ColumnDouble
    for _, field := range sRet.Fields {
        if field.Name() == randomCol {
            c, ok := field.(*entity.ColumnDouble)
            if ok {
                randCol = c
            }
        }
    }
    for i := 0; i < sRet.ResultCount; i++ {
        val, err := randCol.ValueByIdx(i)
        if err != nil {
            log.Fatal(err)
        }
        randoms = append(randoms, val)
        scores = append(scores, sRet.Scores[i])
    }
    log.Printf("\trandoms: %v, scores: %v\n", randoms, scores)
}

Mukammal نمونہ سورس کوڈ, Go Milvus Getting Started Source Code