一架梯子,一头程序猿,仰望星空!
Milvus向量数据库教程 > 内容正文

Go Milvus条件搜索


执行条件查询

本主题介绍如何执行条件查询,类似SQL WHERE条件。

与向量相似性搜索不同,查询是通过基于布尔表达式的标量过滤检索向量。Milvus支持标量字段中的多种数据类型和各种布尔表达式。布尔表达式可以过滤标量字段或主键字段,并检索与过滤条件匹配的所有结果。

下面的示例展示了如何在一个包含2000行数据的数据集上执行查询,包含书籍ID(主键),字数(标量字段)和书籍介绍(向量字段)。模拟根据书籍ID查询特定书籍的情况。

加载集合

在Milvus中,所有的搜索和查询操作都在内存中执行。在进行查询之前,需要将集合加载到内存中。

err := milvusClient.LoadCollection(
  context.Background(),   // ctx
  "book",                 // CollectionName
  false                   // async
)
if err != nil {
  log.Fatal("加载集合失败:", err.Error())
}

执行查询

下面的示例根据特定的book_id值筛选向量,并返回结果的book_id字段和book_intro

Milvus支持为查询设置一致性级别。本主题的示例将一致性级别设置为Strong。您还可以将一致性级别设置为BoundedSessionEventually。有关Milvus中四个一致性级别的更多信息,请参见一致性。

您还可以在过滤表达式中使用动态字段,并在查询请求中输出字段。例如,请参见动态模式。

opt := client.SearchQueryOptionFunc(func(option *client.SearchQueryOption) {
    option.Limit = 3
    option.Offset = 0
    option.ConsistencyLevel = entity.ClStrong
    option.IgnoreGrowing = false
})

queryResult, err := milvusClient.Query(
    context.Background(),                                   // ctx
    "book",                                                 // CollectionName
    "",                                                     // PartitionName
    entity.NewColumnInt64("book_id", []int64{2,4,6,8}),     // expr
    []string{"book_id", "book_intro"},                      // OutputFields
    opt,                                                    // queryOptions
)
if err != nil {
    log.Fatal("查询集合失败:", err.Error())
}
参数 描述 选项
ctx 用于控制API调用过程的上下文。 N/A
CollectionName 要查询的集合名称。 N/A
partitionName 要加载的分区的名称列表。如果为空,则将查询所有分区。 N/A
expr 用于过滤属性的布尔表达式。 有关更多信息,请参见布尔表达式规则
OutputFields 要返回的字段名称。 当前版本不支持向量字段。
opts entity.SearchQueryOptionFunc形式表示的查询选项。 - Limit 表示要返回的实体数量。- Offset 表示搜索过程中要跳过的实体数量。该参数和Limit的总和应小于16384。- ConsistencyLevel 表示在搜索过程中应用的一致性级别。- Ignore Growing 表示在相似度搜索过程中是否忽略增长段。默认值为False,表示搜索涉及增长段。

检查返回的结果。

fmt.Printf("%#v\n", queryResult)
for _, qr := range queryResult {
    fmt.Println(qr.IDs)
}

计算实体数量

在执行查询时,您可以将count(*)附加到output_fields中,这样Milvus可以返回集合中的实体数量。如果要统计满足特定条件的实体数量,请使用expr来定义一个布尔表达式。

限制

当在output_fields中使用count(*)时,不允许使用limit参数。



关联主题