搜索 Document
query() 方法支持向量相似度搜索、条件过滤(类似 SQL WHERE 子句)或两者组合的混合查询。
它返回一个 Doc 对象列表,每个对象包含匹配的 Document 及其相关性评分。
Query
在 Zvec 中,所有查询都是通过将参数传递给 query() 方法的 Query 对象来执行的。
每个 VectorQuery 指定:
field_name:要搜索的向量字段名称- 查询来源(必须且仅能指定一个):
- 一个显式的
vector,或者 - 一个 Document 的
id(复用已有 Document 中存储的 Embedding)
必须且只能提供
vector或id中的一个。同时指定两者会引发错误。 - 一个显式的
param(可选):索引特定的查询参数(例如 HNSW 的ef)
查询类型
单向量搜索
使用单个向量 Embedding 查找 Document
多向量搜索
组合多个 Embedding 并进行重排序
条件过滤
使用标量字段条件过滤 Document
向量 + 过滤搜索
将向量搜索与条件过滤结合使用
快速开始示例
单向量搜索
import zvec
result = collection.query(
vectors=zvec.VectorQuery(
field_name="dense_embedding",
vector=[0.1] * 768, # 实际使用时请替换为真实的 Embedding
),
topk=10,
)多向量搜索
import zvec
result = collection.query(
topk=10,
vectors=[
zvec.VectorQuery(field_name="dense_embedding", vector=[0.1] * 768),
zvec.VectorQuery(field_name="sparse_embedding", vector={1: 0.1, 37: 0.43}),
],
reranker=zvec.WeightedReRanker(
topn=3,
metric=zvec.MetricType.IP,
weights={
"dense_embedding": 1.2,
"sparse_embedding": 1.0,
},
),
)
print(result)条件过滤
result = collection.query(filter="publish_year < 1999", topk=50)混合搜索
import zvec
result = collection.query(
vectors=zvec.VectorQuery(
field_name="dense_embedding",
vector=[0.1] * 768, # 实际使用时请替换为真实的 Embedding
),
filter="publish_year < 1999",
topk=10,
)