首页/AI/RAG 与向量库速查/Milvus 检索与过滤

Milvus 检索与过滤

Milvus 检索用 search:给出查询向量、top_k、输出字段与过滤表达式;过滤表达式作用在标量字段上,可与向量检索组合,limit/offset 用于分页。

RAG 与向量库速查AI更新于 2026-10-13

检索接口怎么用

Milvus 的检索接口需要给出查询向量、返回条数、输出字段与检索参数,过滤条件写在表达式中并作用在标量字段上,可与向量检索组合使用。批量检索时把多个查询向量一次性传入即可返回多组结果,比分多次调用更省往返开销。

基本信息

必需参数集合名、查询向量、返回条数
常用参数输出字段、检索参数、过滤表达式
过滤对象标量字段:来源、版本、租户、时间
前提过滤字段建议建标量索引以提升带条件检索性能

基础检索

基础检索
res = client.search(
    collection_name="kb",
    data=[query_vec],            # 批量为多个向量
    limit=10,
    output_fields=["source", "title"],
    search_params={"metric_type": "COSINE", "params": {"ef": 64}},
)

带过滤表达式

带过滤表达式
res = client.search(
    collection_name="kb", data=[query_vec], limit=10,
    filter='source == "handbook" && version >= 2',
    output_fields=["source", "version"],
)

使用要点

  • 只取需要的输出字段:整段长文本会显著增加网络与序列化开销
  • 过滤表达式语法与 SQL 不同,使用双等号与逻辑运算符,拼错会直接报错
  • 检索前确认集合已加载,未加载会返回明确的错误提示
  • 按需设置检索参数,图索引的候选队列长度可直接在查询时调整
  • 分页取结果时注意深分页的开销,必要时改用游标式设计

表达式与字段类型

字段类型可用写法注意
字符串等值或集合匹配区分大小写
数值比较与范围整数与浮点写法一致
布尔直接判断适合标记类字段
组合条件逻辑与或非括号提升可读性

常见问题

  • 返回结果条数不足:过滤条件过严,与向量检索叠加后候选被筛空
  • 检索报集合未加载:遗漏加载步骤或加载失败
  • 延迟异常:输出字段过多或过滤字段未建标量索引
  • 结果与预期不符:度量方式与写入时不一致
过滤字段先建标量索引;带过滤检索的性能与过滤集大小强相关,条件越严越要先评估最差分布下的返回条数。

批量检索与性能

  • 多个查询向量一次传入比分多次调用更省往返开销,但要控制单次批量大小
  • 只取必要字段能显著减少网络传输,长文本字段尤其明显
  • 带过滤检索的耗时与过滤集大小相关,过滤越严越要先评估
  • 把每次检索的耗时与召回条数打点,延迟恶化时能快速定位
  • 写入后立即检索可能因数据落盘延迟而查不到,需接受最终一致

易错点

  • output_fields 请求整段长文本,网络与序列化开销明显
  • 过滤表达式语法与 SQL 不同(如用双等号与逻辑与),拼错直接报错
  • 带强过滤条件检索时返回条数不足却未做监测,答案悄悄缺失要点
  • 检索前未确认集合加载状态,批量任务中整批失败

数据来源与参考

  • Milvus 官方文档(Search / Filtering)
  • Milvus 官方文档(Scalar Index)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌