跳到主要内容

Search()

此操作会对指定的 Collection 执行近似最近邻(ANN)搜索。您可以使用 NewSearchOption 进行基于向量的搜索,或使用 NewSearchByIDsOption 按主键 ID 搜索。

go
func (c *Client) Search(ctx context.Context, option SearchOption, callOptions ...grpc.CallOption) ([]ResultSet, error)

请求语法

向量搜索:

go
option := milvusclient.NewSearchOption(collectionName, limit, vectors).
WithPartitions(partitionNames).
WithFilter(expr).
WithTemplateParam(key, val).
WithOffset(offset).
WithOutputFields(fieldNames).
WithConsistencyLevel(consistencyLevel).
WithANNSField(annsField).
WithGroupByField(groupByField).
WithGroupSize(groupSize).
WithStrictGroupSize(strictGroupSize).
WithIgnoreGrowing(ignoreGrowing).
WithAnnParam(ap).
WithSearchParam(key, value).
WithFunctionReranker(fr)

resultSets, err := cli.Search(ctx, option)

按主键 ID 搜索:

go
option := milvusclient.NewSearchByIDsOption(collectionName, limit, ids).
WithPartitions(partitionNames).
WithFilter(expr).
WithOutputFields(fieldNames)

resultSets, err := cli.Search(ctx, option)

参数:

  • option (SearchOption) -

    搜索选项。使用 NewSearchOption 进行向量搜索,或使用 NewSearchByIDsOption 进行基于 PK 的搜索。

构建器方法:

  • NewSearchOption(collectionName string, limit int, vectors []entity.Vector)
    此方法会创建一个用于基于向量的 ANN 搜索的搜索选项。

  • NewSearchByIDsOption(collectionName string, limit int, ids column.Column)
    此方法会创建一个根据主键 ID 查找 Entity 的搜索选项。

  • WithPartitions(partitionNames ...string)
    此方法将搜索范围限制为指定的 Partition 名称。

  • WithFilter(expr string)
    此方法会对搜索结果应用布尔表达式过滤。

  • WithTemplateParam(key string, val any)
    此方法会为表达式求值设置模板参数。

  • WithOffset(offset int)
    此方法会设置返回匹配结果前要跳过的结果数量。

  • WithOutputFields(fieldNames ...string)
    此方法指定结果集中要返回哪些字段。

  • WithConsistencyLevel(consistencyLevel entity.ConsistencyLevel)
    此方法会设置搜索的一致性级别。

  • WithANNSField(annsField string)
    当 Collection 包含多个向量字段时,此方法指定要搜索的向量字段。

  • WithGroupByField(groupByField string)
    此方法按指定字段对搜索结果进行分组。

  • WithGroupSize(groupSize int)
    启用分组时,此方法设置每组返回的结果数量。

  • WithStrictGroupSize(strictGroupSize bool)
    此方法会强制执行严格的组大小限制。

  • WithIgnoreGrowing(ignoreGrowing bool)
    此方法在搜索期间忽略增长中的 Segment。

  • WithAnnParam(ap index.AnnParam)
    此方法设置近似最近邻搜索参数(例如 nprobe、ef)。

  • WithSearchParam(key, value string)
    此方法设置自定义搜索参数键值对。

  • WithFunctionReranker(fr *entity.Function)
    此方法会对搜索结果应用基于函数的重排器。

返回类型:

[]ResultSet, error

返回值:

搜索或查询结果,包含匹配的 Entity 及其分数和字段。如果操作失败,则返回错误。

异常:

  • error

    通过检查 err != nil 获取失败详情。

示例

go
import (
"context"
"log"

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

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

milvusAddr := "YOUR_CLUSTER_ENDPOINT"
token := "YOUR_CLUSTER_TOKEN"

cli, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: milvusAddr,
APIKey: token,
})
if err != nil {
log.Fatal("failed to connect to milvus server: ", err.Error())
}

defer cli.Close(ctx)

queryVector := []float32{0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592}

resultSets, err := cli.Search(ctx, milvusclient.NewSearchOption(
"quick_setup", // collectionName
3, // limit
[]entity.Vector{entity.FloatVector(queryVector)},
))
if err != nil {
log.Fatal("failed to perform basic ANN search collection: ", err.Error())
}

for _, resultSet := range resultSets {
log.Println("IDs: ", resultSet.IDs)
log.Println("Scores: ", resultSet.Scores)
}
最低 SDK 版本v2.6.x
Ctrl I