QueryVectors API を使用して、ベクトル類似性検索を実行します。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持ちますが、RAM ユーザーまたは RAM ロールは権限を持ちません。Alibaba Cloud アカウントの所有者または管理者は、RAM ポリシーまたはバケットポリシーを使用して権限を付与する必要があります。
API | アクション | 説明 |
QueryVectors |
| ベクターデータをクエリします。 |
リクエスト構文
ベクトルインデックスが作成されてから最大 30 秒間、QueryVectorsの呼び出しに対する再現率が低くなる場合があります。PutVectorsAPI を使用して書き込まれたデータは、約 2~3 秒でクエリ可能になります。
POST /?queryVectors HTTP/1.1
Host: examplebucket-123***456.cn-hangzhou-internal.oss-vectors.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Content-type: application/json
{
"filter": {
"$and": [{
"type": {
"$in": ["comedy", "documentary"]
}
}, {
"year": {
"$eq": "2020"
}
}]
},
"indexName": "string",
"queryVector": {
"float32":[float]
},
"returnDistance": boolean,
"returnMetadata": boolean,
"topK": int
}リクエストヘッダー
この API は、共通リクエストヘッダーのみを使用します。詳細については、「共通 HTTP ヘッダー」をご参照ください。
リクエストパラメーター
パラメーター | タイプ | 必須 | 例 | 説明 |
indexName | 文字列 | はい | vectorindex1 | ベクトルインデックスの名前。 |
queryVector | コンテナ | はい | N/A | クエリベクトル。次元はベクトルインデックスの次元と一致する必要があります。 |
filter | コンテナ | いいえ | N/A | メタデータに基づいてデータをフィルタリングします。メタデータフィルターには、次の制限が適用されます。
|
returnDistance | ブール値 | いいえ | false | 類似度距離を返すかどうかを指定します。有効な値:
|
returnMetadata | ブール値 | いいえ | false | メタデータを返すかどうかを指定します。有効な値:
|
topK | 数値 | はい | 10 | 返す類似度の高い結果の数。値は 1 から 500 までの整数である必要があります。 |
フィルター演算子
演算子 | タイプ | 説明 |
| 文字列、数値、ブール値 | 完全一致 (単一の値の場合)。配列型のメタデータで使用した場合、値が配列内のいずれかの要素と一致すると、演算子は |
| 文字列、数値、ブール値 | 指定された値と等しくない値に一致します。 |
| 数値 | より大きい。 |
| 数値 | 以上。 |
| 数値 | より小さい。 |
| 数値 | 以下。 |
| 空ではないプリミティブの配列 | 配列内の任意の値に一致します (SQL の |
| 空ではないプリミティブの配列 | 配列内のどの値とも一致しません (SQL の |
| ブール値 | メタデータキーが存在するかどうかを確認します。 |
| 空ではないフィルターの配列 | フィルター条件の配列に対して論理 AND 演算を実行します。 |
| 空ではないフィルターの配列 | フィルター条件の配列に対して論理 OR 演算を実行します。 |
フィルターの例
以下は、一般的なフィルター式の例です。演算子が省略された場合、デフォルトで $eq が使用されます。
// 単純な等価性 (演算子が省略された場合はデフォルトで $eq を使用)
{"category": "finance"}
// 明示的な等価性 / 不等価性
{"category": {"$eq": "finance"}}
{"category": {"$ne": "archived"}}
// 数値比較
{"created_year": {"$gt": 2023}}
{"created_year": {"$gte": 2024}}
{"created_year": {"$lt": 2026}}
{"created_year": {"$lte": 2025}}
// 配列のマッチング
{"language": {"$in": ["zh", "en"]}}
{"language": {"$nin": ["ja", "ko"]}}
// 存在チェック
{"author": {"$exists": true}}
// 論理的な組み合わせ
{"$and": [{"category": {"$eq": "finance"}}, {"created_year": {"$gte": 2024}}]}
{"$or": [{"category": {"$eq": "finance"}}, {"category": {"$eq": "tech"}}]}
// 同じフィールドに対する複数の条件 (範囲)
{"score": {"$gte": 0.6, "$lte": 0.95}}レスポンスヘッダー
この API は、共通レスポンスヘッダーのみを使用します。詳細については、「共通 HTTP ヘッダー」をご参照ください。
レスポンス要素
パラメーター | タイプ | 例 | 説明 |
vectors | オブジェクトの配列 | / | ベクトル検索結果のリスト。 |
key | 文字列 | doc-001 | ベクタープライマリキー。 親ノード: vectors |
distance | float32 | 0.25 | 返されたベクトルとクエリベクトルの類似度距離。値が小さいほど、類似度が高いことを示します。このパラメーターは、 親ノード: vectors |
metadata | オブジェクト | / | ベクトルの完全なメタデータ。このパラメーターは、 親ノード: vectors |
例
POST /?queryVectors HTTP/1.1
Host: examplebucket-123***456.cn-hangzhou-internal.oss-vectors.aliyuncs.com
Date: Thu, 17 Apr 2025 01:33:47 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218
Content-type: application/json
{
"filter": {
"$and": [{
"category": {
"$in": ["technology", "science"]
}
}, {
"year": {
"$eq": "2020"
}
}]
},
"indexName": "vectorindex1",
"queryVector": {
"float32": [0.15, 0.25, 0.35, 0.45, 0.55]
},
"returnDistance": true,
"returnMetadata": true,
"topK": 5
}レスポンスの例
HTTP/1.1 200 OK
x-oss-request-id: 534B371674E88A4D8906****
Date: Thu, 17 Apr 2025 01:33:47 GMT
Connection: keep-alive
Server: AliyunOSS
Content-type: application/json
{
"vectors": [
{
"distance": 0.12,
"key": "doc-001",
"metadata": {
"category": ["technology", "ai"],
"title": "Introduction to Vector Search",
"year": "2020"
}
},
{
"distance": 0.25,
"key": "doc-003",
"metadata": {
"category": ["science"],
"title": "Advanced Vector Operations",
"year": "2020"
}
}
]
}SDK
QueryVectors API は、次の SDK で利用できます。
ossutil CLI
この API は、ossutil コマンドラインツールの query-vectors コマンドを使用して実行できます。
エラーコード
エラーコード | HTTP ステータスコード | 説明 |
VectorIndexParameterInvalid | 400 | リクエストに無効なベクトルインデックスパラメーターが含まれています。 |
MalformedJson | 400 | リクエスト本文の JSON 形式が無効です。 |
AccessDenied | 403 | このエラーの原因として、以下が考えられます。
|
NoSuchVectorIndex | 404 | 指定されたベクトルインデックスは存在しません。 |
QpsLimitExceeded | 503 | リクエストレートが QPS 制限を超えました。リクエストはスロットリングされています。 |