search_iterator()
此操作以迭代方式执行向量相似性搜索,并可选择使用标量过滤表达式。
外部 Collection 不支持此操作。
请求语法
search_iterator(
self,
collection_name: str,
data: Union[List[list], list],
batch_size: Optional[int] = 1000,
filter: str = "",
limit: int = 10,
output_fields: Optional[List[str]] = None,
search_params: Optional[dict] = None,
timeout: Optional[float] = None,
partition_names: Optional[List[str]] = None,
anns_field: Optional[str] = None,
round_decimal: int = -1
**kwargs,
) -> List[List[dict]]
参数:
-
collection_name (str) -
[必需]
现有 Collection 的名称。
-
data (List[list], list]) -
[必需]
向量嵌入列表。
Zilliz Cloud 会搜索与指定的向量嵌入最相似的结果。
-
batch_size (int) -
每次迭代返回的 Entity 数量。默认值为 1000。
-
anns_field (str) -
当前搜索的目标向量字段名称。
-
filter (str) -
用于过滤匹配 Entity 的标量过滤条件。
该值默认为空字符串,表示不应用任何条件。
您可以将此参数设置为空字符串以跳过标量过滤。要构建标量过滤条件,请参阅 过滤概述。
-
limit (int) -
要返回的 Entity 总数。
您可以将此参数与 param 中的 offset 结合使用,以启用分页。
该值与 param 中 offset 的总和应小于 16,384。
-
output_fields (list[str]) -
返回的每个 Entity 中要包含的字段名称列表。
该值默认为 None。如果未指定,则仅包含主字段。
-
search_params (dict) -
此操作专用的参数设置。
-
params (dict) -
附加参数
-
radius (float) -
确定最低相似度阈值。当 Collection 的度量类型设置为
L2时,请确保此值大于 range_filter 的值。否则,此值应小于 range_filter 的值。 -
range_filter (float) -
将搜索范围细化为特定相似度区间内的向量。当 Collection 的度量类型为
IP或COSINE时,请确保此值大于 radius 的值。否则,此值应小于 radius 的值。 -
level (int)
Zilliz Cloud 使用统一参数来简化搜索参数调优,而不是让您去处理一大堆针对各种索引算法的搜索参数。
该值默认为 1,取值范围为 1 到 10。增大该值会提高召回率,但会降低搜索性能。有关详情,请参阅 召回调优。
-
page_retain_order (bool) -
当提供
offset时,是否保留搜索结果的顺序。此参数仅在您同时设置
radius时适用。
-
有关其他适用搜索参数的详细信息,请阅读 AUTOINDEX Explained 以了解更多。
-
-
group_by_field (str)
按指定字段对搜索结果进行分组,以确保结果多样性并避免返回同一组中的多个结果。
-
timeout (float | None) -
此操作的超时时长。将其设置为 None 表示当收到任意响应或发生任意错误时,此操作即超时。
-
partition_names (list) -
Partition 名称列表。
该值默认为 None。如果已指定,则仅指定的 Partition 会参与查询。
-
anns_field (string) -
目标向量字段的名称。如果目标 Collection 中只有一个向量字段,则此参数可选。
-
round_decimal (int) -
距离值的小数位数。默认值为 -1,表示不进行舍入。
-
kwargs -
-
offset (int) -
搜索结果中要跳过的记录数。
您可以将此参数与
limit结合使用,以启用分页。该值与
limit的总和应小于 16,384。 -
round_decimal (int) -
Zilliz Cloud 对计算出的距离值进行舍入时保留的小数位数。
该值默认为 -1,表示 Zilliz Cloud 会跳过对计算距离的舍入并返回原始值。
-
返回类型:
SearchIterator
返回值: 一个 SearchIterator 实例,提供以下方法:
-
next()此方法以迭代方式返回一批 Entity。每次调用时,都会返回一组新的 Entity,直到检索到最后一个 Entity。
-
close()此方法会关闭当前 SearchIterator 实例。
异常:
-
MilvusException
当此操作期间发生任何错误时,将引发此异常。
示例
from pymilvus import MilvusClient
# 1. Set up a milvus client
client = MilvusClient(
uri="https://inxx-xxxxxxxxxxxx.api.gcp-us-west1.zillizcloud.com:19530",
token="user:password"
)
# 2. Create a collection
client.create_collection(
collection_name="test_collection",
dimension=5
)
# 3. Insert data
client.insert(
collection_name="test_collection",
data=[
{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682"},
{"id": 1, "vector": [0.19886812562848388, 0.06023560599112088, 0.6976963061752597, 0.2614474506242501, 0.838729485096104], "color": "red_7025"},
{"id": 2, "vector": [0.43742130801983836, -0.5597502546264526, 0.6457887650909682, 0.7894058910881185, 0.20785793220625592], "color": "orange_6781"},
{"id": 3, "vector": [0.3172005263489739, 0.9719044792798428, -0.36981146090600725, -0.4860894583077995, 0.95791889146345], "color": "pink_9298"},
{"id": 4, "vector": [0.4452349528804562, -0.8757026943054742, 0.8220779437047674, 0.46406290649483184, 0.30337481143159106], "color": "red_4794"},
{"id": 5, "vector": [0.985825131989184, -0.8144651566660419, 0.6299267002202009, 0.1206906911183383, -0.1446277761879955], "color": "yellow_4222"},
{"id": 6, "vector": [0.8371977790571115, -0.015764369584852833, -0.31062937026679327, -0.562666951622192, -0.8984947637863987], "color": "red_9392"},
{"id": 7, "vector": [-0.33445148015177995, -0.2567135004164067, 0.8987539745369246, 0.9402995886420709, 0.5378064918413052], "color": "grey_8510"},
{"id": 8, "vector": [0.39524717779832685, 0.4000257286739164, -0.5890507376891594, -0.8650502298996872, -0.6140360785406336], "color": "white_9381"},
{"id": 9, "vector": [0.5718280481994695, 0.24070317428066512, -0.3737913482606834, -0.06726932177492717, -0.6980531615588608], "color": "purple_4976"}
],
)
# {'insert_count': 10}
# 4. Conduct a search
search_params = {
"metric_type": "IP",
"params": {}
}
# Search with search iterator
iterator = client.search_iterator(
collection_name="test_collection",
data=[[0.05, 0.23, 0.07, 0.45, 0.13]],
batch_size=1000,
output_fields=["vector", "color"],
search_params=search_params
)
results = []
while True:
result = iterator.next()
if not result:
iterator.close()
break
for hit in result:
results.append(hit.to_dict())