hybrid_search()
此操作对 Collection 执行多向量搜索,并在重排序后返回搜索结果。
此方法仅适用于 Dedicated serving 集群和按需计算。
-
若要在 serving 集群的 Collection 中执行此操作,请使用集群 Endpoint 创建 MilvusClient。
-
Free & Serverless
https://{cluster-id}.serverless.{region}.vectordb.zillizcloud.com -
Dedicated
https://{cluster-id}.{region}.vectordb.zillizcloud.com:19530
-
-
若要在按需计算的 Collection 中执行此操作,请使用项目 Endpoint 创建 MilvusClient,然后创建一个会话以连接到按需集群进行搜索。
https://{project-id}.{region}.api.zillizcloud.com
请求语法
hybrid_search(
collection_name: str,
reqs: List[AnnSearchRequest],
ranker: Union[BaseRanker, Function],
limit: int = 10,
output_fields: Optional[List[str]] = None,
timeout: Optional[float] = None,
partition_names: Optional[List[str]] = None,
**kwargs,
) -> SearchResult
参数:
-
collection_name (str) -
[必需]
要搜索的 Collection 名称。 -
reqs (List[AnnSearchRequest]) -
[必需]
混合搜索所组合的 ANN 搜索请求。请使用AnnSearchRequest(data, anns_field, param, limit, expr=None, expr_params=None, filter=None)构造每个请求。-
data (Union[List, SparseMatrixInputType]) -
[必需]
用于此 ANN 搜索请求的查询向量或稀疏矩阵。 -
anns_field (str) -
[必需]
要搜索的向量字段名称。 -
param (Dict) -
[必需]
ANN 搜索参数,例如度量类型及特定于搜索的设置。 -
limit (int) -
[必需]
此 ANN 搜索请求返回的最大匹配数。 -
expr (Optional[str]) -
默认值:None
在 ANN 搜索前应用的布尔过滤表达式。请勿同时提供expr和filter。 -
expr_params (Optional[dict]) -
默认值:None
替换到表达式模板占位符中的值。 -
filter (Optional[str]) -
默认值:None
expr的别名。请勿同时提供这两个值。解析后的表达式可通过只读属性filter获取,即request.filter。
-
-
ranker (Union[BaseRanker, Function]) -
[必需]
用于合并各搜索请求的结果并对其进行排序的 Ranker。 -
limit (int) -
默认值:10
要返回的最大记录数,也称为topk。 -
output_fields (Optional[List[str]]) -
默认值:None
要包含在每个搜索结果中的标量字段。 -
timeout (Optional[float]) -
默认值:None
等待 RPC 的最长时间(秒)。如果省略此参数,客户端将一直等待,直到服务器响应或发生错误。 -
partition_names (Optional[List[str]]) -
默认值:None
要搜索的 Partition 名称。 -
kwargs (Any) -
其他搜索选项,包括分页偏移量和一致性级别。
返回类型:
SearchResult
返回值:
在应用各请求的表达式或过滤器后,返回组合 ANN 请求的搜索结果。
异常:
- MilvusException
当服务器拒绝请求或 RPC 失败时抛出。请查看服务器错误消息以了解确切的失败详情。
示例
以下示例构造一个 ANN 请求并执行混合搜索。
from pymilvus import AnnSearchRequest, MilvusClient
client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")
request = AnnSearchRequest(
data=[[0.1, 0.2, 0.3]],
anns_field="vector",
param={"metric_type": "COSINE"},
limit=10,
filter='category == "paper"',
)
results = client.hybrid_search(
collection_name="book_chunks",
reqs=[request],
ranker=None,
limit=10,
)
print(request.filter)
print(results)