メインコンテンツまでスキップ

Search Iterator

ANN Search では 1 回のクエリで取得できるエンティティ数に上限があり、基本的な ANN Search を使用するだけでは大規模な検索の要件を満たせない場合があります。topK が 16,384 を超える ANN Search リクエストでは、SearchIterator の使用を検討することをお勧めします。このセクションでは、SearchIterator の使用方法と関連する考慮事項について説明します。

Overview​

Search リクエストは検索結果を返しますが、SearchIterator はイテレーターを返します。このイテレーターの next() メソッドを呼び出すと、検索結果を取得できます。

具体的には、SearchIterator は次のように使用できます。

  1. SearchIterator を作成し、検索リクエストごとに返すエンティティ数と返すエンティティの総数を設定します。

  2. ループ内で SearchIterator の next() メソッドを呼び出し、ページ単位で検索結果を取得します。

  3. next() メソッドが空の結果を返した場合は、イテレーターの close() メソッドを呼び出してループを終了します。

Create SearchIterator​

次のコードスニペットは、SearchIterator を作成する方法を示しています。

python
from pymilvus import MilvusClient

client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

# create iterator
query_vectors = [
[0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592]]

iterator = client.search_iterator(
collection_name="iterator_collection",
data=query_vectors,
anns_field="vector",
batch_size=50,
output_fields=["color"],
limit=20000
)

上記の例では、検索ごとに返すエンティティ数 (batch_size/batchSize) を 50 に、返すエンティティの総数(topK)を 20,000 に設定しています。

Use SearchIterator​

SearchIterator の準備ができたら、その next() メソッドを呼び出して、ページ単位で検索結果を取得できます。

python
while True:
result = iterator.next()
if not result:
iterator.close()
break

for res in result:
print(res)

上記のコード例では、無限ループを作成し、ループ内で next() メソッドを呼び出して検索結果を変数に格納し、next() が何も返さないときにイテレーターを閉じています。

このページは役に立ちましたか?