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

Python Milvus条件搜索


条件查询

本主题介绍如何进行条件查询。

与向量相似性搜索不同,条件查询通过布尔表达式进行标量过滤来检索向量。Milvus支持在标量字段和各种布尔表达式上进行查询。布尔表达式可用于进行标量字段或主键字段的过滤,并检索与过滤条件匹配的所有结果。

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

加载集合

在进行查询之前,需要将集合加载到内存中。

from pymilvus import Collection
collection = Collection("book")      # 获取一个已存在的集合。
collection.load()

进行查询

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

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

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

res = collection.query(
  expr = "book_id in [2,4,6,8]",
  offset = 0,
  limit = 10, 
  output_fields = ["book_id", "book_intro"],
)
参数 描述
expr 用于筛选属性的布尔表达式。有关布尔表达式规则的更多细节,请参见布尔表达式规则
limit 要返回的最相似结果数量。该值与offset的总和应小于16384。
offset 返回集合中要跳过的结果数量。仅在指定limit时可用,且此值与limit的总和应小于16384。例如,如果您想要查询向量的第9和第10个最近邻居,将limit设置为2offset设置为8
output_fields(可选) 要返回的字段名称列表。
partition_names(可选) 要查询的分区名称列表。
consistency_level(可选) 查询的一致性级别。

检查返回的结果。

sorted_res = sorted(res, key=lambda k: k['book_id'])
sorted_res

统计实体数

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

统计集合中的所有实体数:

res = collection.query(
  expr="", 
  output_fields = ["count(*)"],
)

print(res)
print(res[0])

统计满足特定筛选条件的实体数:

res = collection.query(
  expr="book_id in [2,4,6,8]", 
  output_fields = ["count(*)"],
)

print(res)
print(res[0])

限制

当在output_fields中使用count(*)时,禁止使用limit参数。



关联主题