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

レンジ検索

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

概要について

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

JrMzwgnfvhxaFob5s5LcxxUxnPc

上の図は、範囲検索リクエストが半径range_filterの2つのパラメータを持っていることを示しています。範囲検索リクエストを受け取ると、Zilliz Cloudは次のようにします:

  • 指定したメトリック型(COSINE)を使用して、クエリベクトルに最も似たすべてのベクトル埋め込みを検索します。

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

  • フィルタした図形から上位K個の図形を返します。

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

メートルタイプ

デノテーション

半径と範囲フィルターの設定要件

L 2

L 2距離が小さいほど、類似度が高いことを示します。

最も類似したベクトル埋め込みを無視するには、確認してください range_filter<=距離<半径

IP

IP距離が大きいほど、類似度が高いことを示します。

最も類似したベクトル埋め込みを無視するには、確認してください 半径<距離<=範囲フィルタ

コサイン

COSINE距離が大きいほど類似度が高いことを示します。

最も類似したベクトル埋め込みを無視するには、確認してください 半径<距離<=範囲フィルタ

ジャカード

ジャッカード距離が小さいほど類似度が高いことを示す。

最も類似したベクトル埋め込みを無視するには、確認してください range_filter<=距離<半径

ハミング

ハミング距離が小さいほど類似度が高いことを示す。

最も類似したベクトル埋め込みを無視するには、確認してください range_filter<=距離<半径

例例

このセクションでは、範囲検索を実行する方法を示します。次のコードスニペットの検索要求にはメトリックタイプが含まれていないため、デフォルトのメトリックタイプであるCOSINEが適用されます。この場合、半径値がrange_filter値よりも小さいことを確認してください。

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

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)