下面是在milvus golang中创建标量索引的基本步骤:
- 首先,需要导入milvus库
import (
"github.com/milvus-io/milvus-sdk-go/milvus"
)
- 建立与Milvus服务器的连接
client, err := milvus.NewClient(milvus.Address("localhost:19530"))
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
defer client.Close()
- 创建一个collection
schema := []*milvus.FieldSchema{
milvus.NewFieldSchema("field_name", milvus.DataTypeFloatVector, 64),
}
status, err := client.CreateTable(context.Background(), "collection_name", schema, milvus.DefaultIndexParam())
if err != nil {
log.Fatalf("failed to create table: %v", err)
}
if !status.Ok() {
log.Fatalf("failed to create table: %s", status.GetMessage())
}
- 插入数据
data := []*milvus.RowRecord{
milvus.NewRowRecord([]float32{1.0, 2.0, 3.0}),
milvus.NewRowRecord([]float32{4.0, 5.0, 6.0}),
}
ids, status, err := client.Insert(context.Background(), "collection_name", "", data)
if err != nil {
log.Fatalf("failed to insert data: %v", err)
}
if !status.Ok() {
log.Fatalf("failed to insert data: %s", status.GetMessage())
}
- 创建标量索引
indexParam := milvus.NewIndexParam(milvus.IndexTypeIDMap)
indexParam.Set("nlist", "16384")
status, err := client.CreateIndex(context.Background(), "collection_name", "field_name", indexParam)
if err != nil {
log.Fatalf("failed to create index: %v", err)
}
if !status.Ok() {
log.Fatalf("failed to create index: %s", status.GetMessage())
}
- 查询数据
queryVec := milvus.NewRowRecord([]float32{1.5, 2.5, 3.5})
searchParam := milvus.SearchParam{
Dsl: `{"bool": {"must": [{"vector": {"field_name": {"topk": 10, "query": [1.0, 2.0, 3.0]}}}], "boost": 1}}`,
}
res, err := client.Search(context.Background(), "collection_name", []milvus.RowRecord{*queryVec}, searchParam)
if err != nil {
log.Fatalf("failed to search data: %v", err)
}
for i, id := range res[0].Ids {
fmt.Printf("Rank %d, ID %d, Distance %f\n", i+1, id, res[0].Distances[i])
}
这些步骤可以创建一个标量索引并查询它。当然,还有其他可用的参数和方法可供使用,具体取决于你要执行的任务。




