可以使用以下步骤访问 Milvus Golang:
- 安装 Milvus Go SDK
go get github.com/milvus-io/milvus-sdk-go
- 连接到 Milvus 服务器
import (
"context"
"github.com/milvus-io/milvus-sdk-go/milvus"
)
ctx := context.Background()
client, err := milvus.NewClient(ctx, milvus.WithIPAddress("localhost"), milvus.WithPort("19530"))
if err != nil {
panic(err)
}
defer client.Close()
- 创建或加载集合
collectionName := "test_collection"
dimension := 512
indexParams := map[string]string{
"metric_type": "L2",
}
err = client.CreateCollection(ctx, collectionName, dimension, indexParams)
if err != nil {
if !milvus.IsAlreadyExists(err) {
panic(err)
}
}
// or
collectionParam := &milvus.CollectionParam{
CollectionName: collectionName,
Dimension: dimension,
IndexParams: indexParams,
}
err = client.HasCollection(ctx, collectionParam)
if err != nil && !milvus.IsCollectionNotExists(err) {
panic(err)
} else if milvus.IsCollectionNotExists(err) {
err = client.CreateCollection(ctx, collectionParam)
if err != nil {
panic(err)
}
}
- 插入向量
vectors := make([][]float32, 1000)
for i := 0; i < 1000; i++ {
vector := make([]float32, dimension)
for j := 0; j < dimension; j++ {
vector[j] = rand.Float32()
}
vectors[i] = vector
}
ids := make([]int64, len(vectors))
for i := 0; i < len(ids); i++ {
ids[i] = int64(i)
}
insertParam := &milvus.InsertParam{
CollectionName: collectionName,
PartitionName: "",
FieldsData: vectors,
RowIDs: ids,
}
resp, err := client.Insert(ctx, insertParam)
if err != nil {
panic(err)
}
- 构建索引
indexParams := map[string]string{
"metric_type": "L2",
}
indexType := milvus.IVF_FLAT
param := &milvus.IndexParam{
CollectionName: collectionName,
IndexType: indexType,
IndexParams: indexParams,
}
status, err := client.CreateIndex(ctx, param)
if err != nil || !status.Ok() {
panic(err)
}
- 搜索向量
searchParam := &milvus.SearchParam{
CollectionName: collectionName,
QueryVectors: vectors[:10],
TopK: 5,
Params: map[string]string{
"nprobe": "16",
},
}
resp, err := client.Search(ctx, searchParam)
if err != nil {
panic(err)
}
- 删除集合
err = client.DropCollection(ctx, collectionName)
if err != nil {
panic(err)
}