search_iterator()
この操作は、オプションのスカラーフィルタリング式を使用して、ベクトル類似度検索を反復的に実行します。
外部コレクションでは、この操作はサポートされていません。
リクエスト構文
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) -
[必須]
既存のコレクションの名前です。
-
data (List[list], list]) -
[必須]
ベクトル埋め込みのリストです。
Zilliz Cloud は、指定されたものに最も類似したベクトル埋め込みを検索します。
-
batch_size (int) -
各イテレーションで返すエンティティの数です。デフォルト値は 1000 です。
-
anns_field (str) -
現在の検索の対象ベクトルフィールドの名前です。
-
filter (str) -
一致するエンティティを絞り込むためのスカラーフィルタリング条件です。
デフォルト値は空文字列で、条件が適用されないことを示します。
スカラーフィルタリングをスキップするには、このパラメーターを空文字列に設定できます。スカラーフィルタリング条件を構築するには、Filtering Overview を参照してください。
-
limit (int) -
返すエンティティの総数です。
このパラメーターを param 内の offset と組み合わせて使用すると、ページネーションを有効にできます。
この値と param 内の offset の合計は 16,384 未満である必要があります。
-
output_fields (list[str]) -
返される各エンティティに含めるフィールド名のリストです。
デフォルト値は None です。指定しない場合は、プライマリフィールドのみが含まれます。
-
search_params (dict) -
この操作に固有のパラメーター設定です。
-
params (dict) -
追加パラメーター
-
radius (float) -
最小類似度のしきい値を決定します。コレクションのメトリックタイプが
L2に設定されている場合、この値は range_filter の値より大きくなるようにしてください。それ以外の場合、この値は range_filter の値より小さくする必要があります。 -
range_filter (float) -
特定の類似度範囲内のベクトルに検索を絞り込みます。コレクションのメトリックタイプが
IPまたはCOSINEの場合、この値は radius の値より大きくなるようにしてください。それ以外の場合、この値は radius の値より小さくする必要があります。 -
level (int)
Zilliz Cloud は、さまざまなインデックスアルゴリズムに固有の多数の検索パラメーターを扱う代わりに、検索パラメーターの調整を簡素化するための統合パラメーターを使用します。
デフォルト値は 1 で、1 から 10 の範囲です。値を大きくすると再現率は高くなりますが、検索パフォーマンスは低下します。詳細については、Tune Recall Rate を参照してください。
-
page_retain_order (bool) -
offsetが指定された場合に、検索結果の順序を保持するかどうかです。このパラメーターは、
radiusも設定した場合にのみ適用されます。
-
適用可能なその他の検索パラメーターの詳細については、AUTOINDEX Explained を参照してください。
-
-
group_by_field (str)
指定されたフィールドで検索結果をグループ化し、多様性を確保して、同じグループから複数の結果が返されるのを防ぎます。
-
timeout (float | None) -
この操作のタイムアウト時間です。これを None に設定すると、何らかの応答が到着するか、何らかのエラーが発生した時点でこの操作がタイムアウトすることを示します。
-
partition_names (list) -
パーティション名のリストです。
デフォルト値は None です。指定した場合、指定されたパーティションのみがクエリの対象になります。
-
anns_field (string) -
対象ベクトルフィールドの名前です。対象コレクションにベクトルフィールドが 1 つしかない場合、このパラメーターは省略できます。
-
round_decimal (int) -
距離値の小数点以下の桁数です。デフォルト値は -1 で、丸めを適用しないことを示します。
-
kwargs -
-
offset (int) -
検索結果でスキップするレコード数です。
このパラメーターを
limitと組み合わせて使用すると、ページネーションを有効にできます。この値と
limitの合計は 16,384 未満である必要があります。 -
round_decimal (int) -
Zilliz Cloud が計算された距離を丸める際の小数点以下の桁数です。
デフォルト値は -1 で、Zilliz Cloud が計算された距離の丸めをスキップし、生の値を返すことを示します。
-
戻り値の型:
SearchIterator
戻り値: 以下のメソッドを提供する SearchIterator インスタンスです。
-
next()このメソッドは、エンティティのバッチを反復的に返します。呼び出すたびに、最後のエンティティが取得されるまで新しいエンティティのセットが返されます。
-
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())