Zvec Logo

搜索 Document

query() 方法支持向量相似度搜索全文检索(BM25 排序)、条件过滤(类似 SQL WHERE 子句)或以上方式的组合查询

它返回一个 Doc 对象列表,每个对象包含匹配的 Document 及其相关性评分。


Query

在 Zvec 中,所有查询都通过向 query() 方法传入 Query 对象来执行。

每个 Query 指定:

  1. field_name:要搜索的向量字段或全文检索字段名称
  2. 查询来源
    • 向量搜索提供显式的 vector 或 Document id(复用已有 Document 中存储的 Embedding)
    • 全文检索提供 fts 子句

    单个 Query 可以执行向量搜索或全文检索,但不能同时执行两者。

  3. param(可选):索引特定的查询参数(例如 HNSWef,或全文检索default_operator

每个 ZVecQuery 指定:

  1. fieldName:要搜索的向量字段或全文检索字段名称
  2. 查询来源
    • 向量搜索提供 vector
    • 全文检索提供 fts
  3. params(可选):索引特定的查询参数(例如 HNSWef,或全文检索defaultOperator


查询类型


快速开始示例

单向量搜索

import zvec

result = collection.query(  
    queries=zvec.Query(
        field_name="dense_embedding",
        vector=[0.1] * 768,  # 实际使用时请替换为真实的 Embedding
    ),
    topk=10,
)

多向量搜索

import zvec

result = collection.query(  
    topk=10,
    queries=[
        zvec.Query(field_name="dense_embedding", vector=[0.1] * 768),         
        zvec.Query(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(          
    queries=zvec.Query(
        field_name="dense_embedding",
        vector=[0.1] * 768,  # 实际使用时请替换为真实的 Embedding
    ),
    filter="publish_year < 1999",
    topk=10,
)

全文检索

from zvec.model.param.query import Fts, Query

result = collection.query(  
    queries=Query(
        field_name="content",
        fts=Fts(match_string="机器学习"),
    ),
    topk=10,
)

本页目录