メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

レンジサーチ

レンジサーチは、返されるエンティティの距離またはスコアを特定の範囲内に制限することで、検索結果の適合性を向上させます。このページでは、レンジサーチとは何か、およびレンジサーチを実行する手順について説明します。

概要

レンジサーチリクエストを実行すると、Zilliz Cloud は ANN サーチ結果からクエリベクトルに最も類似したベクトルを中心として、サーチリクエストで指定された radius を外側の円の半径、range_filter を内側の円の半径として 2 つの同心円を描きます。この 2 つの同心円によって形成される円環領域内に類似度スコアが収まるすべてのベクトルが返されます。ここで、range_filter0 に設定することもでき、これは指定された類似度スコア(radius)内のすべてのエンティティが返されることを示します。

Sewjwp5DShFgKAbC1Mwcrr7enOD

上記の図は、レンジサーチリクエストが radiusrange_filter の 2 つのパラメータを含むことを示しています。レンジサーチリクエストを受信すると、Zilliz Cloud は以下を実行します。

  • 指定されたメトリックタイプ(COSINE)を使用して、クエリベクトルに最も類似したすべてのベクトル埋め込みを見つけます。

  • クエリベクトルとの 距離 または スコアradius および range_filter パラメータで指定された範囲内に収まるベクトル埋め込みをフィルタリングします。

  • フィルタリングされた結果から top-K のエンティティを返します。

radiusrange_filter の設定方法は、サーチのメトリックタイプによって異なります。以下の表は、異なるメトリックタイプでこれら 2 つのパラメータを設定する際の要件を示しています。

メトリックタイプ

表記

radius と range_filter の設定要件

L2

L2 距離が小さいほど、類似度が高くなります。

最も類似したベクトル埋め込みを無視するには、以下を満たすようにします。

range_filter <= distance < radius

IP

IP 距離が大きいほど、類似度が高くなります。

最も類似したベクトル埋め込みを無視するには、以下を満たすようにします。

radius < distance <= range_filter

COSINE

COSINE 距離が大きいほど、類似度が高くなります。

最も類似したベクトル埋め込みを無視するには、以下を満たすようにします。

radius < distance <= range_filter

JACCARD

Jaccard 距離が小さいほど、類似度が高くなります。

最も類似したベクトル埋め込みを無視するには、以下を満たすようにします。

range_filter <= distance < radius

HAMMING

ハミング距離が小さいほど、類似度が高くなります。

最も類似したベクトル埋め込みを無視するには、以下を満たすようにします。

range_filter <= distance < radius

このセクションでは、レンジサーチの実行方法を示します。以下のコードスニペットのサーチリクエストはメトリックタイプを含んでいないため、デフォルトのメトリックタイプ COSINE が適用されます。この場合、radius の値が range_filter の値より小さいことを確認してください。

以下のコードスニペットでは、radius0.4range_filter0.6 に設定し、クエリベクトルとの距離またはスコアが 0.4 から 0.6 の範囲内に収まるすべてのエンティティを Zilliz Cloud に返させます。

from pymilvus import MilvusClient

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

query_vector = [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592]

res = client.search(
collection_name="my_collection",
data=[query_vector],
limit=3,
search_params={
"params": {
"radius": 0.4,
"range_filter": 0.6
}
}
)

for hits in res:
print("TopK results:")
for hit in hits:
print(hit)
📘Notes

クエリベクトルがすでにターゲットコレクションに存在する場合は、検索前にそれらを取得する代わりに、ids を使用することを検討してください。詳細については、Primary-キー Search を参照してください。