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

範囲検索

範囲検索は、返されるエンティティの距離またはスコアを特定の範囲内に制限することで、検索結果の関連性を向上させます。このページでは、範囲検索とは何か、範囲検索を実行する手順について理解するのに役立ちます。

概要

範囲検索リクエストを実行する際、Zilliz CloudはANN検索結果からクエリベクトルに最も類似するベクトルを中央とし、検索リクエストで指定されたradiusを外円の半径とし、range_filterを内円の半径として同心円を描きます。これらの同心円によって形成される環状領域に含まれるすべてのベクトルが返されます。ここで、range_filter0に設定でき、指定された類似度スコア(半径)内のすべてのエンティティが返されることを意味します。

Sewjwp5DShFgKAbC1Mwcrr7enOD

上記の図は、範囲検索リクエストが2つのパラメータ:radiusrange_filterを含むことを示しています。Zilliz Cloudが範囲検索リクエストを受信すると、以下のことを行います:

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

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

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

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

メトリックタイプ

表記

radiusおよびrange_filterの設定要件

L2

L2距離が小さいほど類似度が高い。

最も類似するベクトル埋め込みを無視するには、

range_filter <= 距離 < radius となるようにしてください

IP

IP距離が大きいほど類似度が高い。

最も類似するベクトル埋め込みを無視するには、

radius < 距離 <= range_filter となるようにしてください

COSINE

COSINE距離が大きいほど類似度が高い。

最も類似するベクトル埋め込みを無視するには、

radius < 距離 <= range_filter となるようにしてください

JACCARD

Jaccard距離が小さいほど類似度が高い。

最も類似するベクトル埋め込みを無視するには、

range_filter <= 距離 < radius となるようにしてください

HAMMING

Hamming距離が小さいほど類似度が高い。

最も類似するベクトル埋め込みを無視するには、

range_filter <= 距離 < radius となるようにしてください

このセクションでは、範囲検索の実行方法を示します。以下のコードスニペットの検索リクエストにはメトリックタイプは含まれていません。これは、デフォルトのメトリックタイプCOSINEが適用されることを示しています。この場合、radiusの値がrange_filterの値より小さくなるようにしてください。

以下のコードスニペットでは、radius0.4に、range_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)