すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:セマンティックコンテンツおよびマルチメディア特徴に基づいてファイルを高速検索するベクトル検索の使用

最終更新日:May 10, 2026

OSS ベクトル検索は、セマンティックコンテンツ、OSS メタデータ、マルチメディアメタデータ、オブジェクトの ETag、タグ、カスタムメタデータなどの条件に基づき、大規模なデータセットから特定のファイルを迅速に検索する機能です。

ユースケース

個人および企業のオフィスシーン

ベクトル検索により、オフィスファイルをそのセマンティックコンテンツに基づいて検索できます。たとえば、「ERP システムの使い方」や「IT 修理手順」、「2024 年度業績分析」などのキーワードで検索可能です。これにより、ファイル検索が簡素化され、オフィス業務の効率が向上します。

マルチメディアソーシャルメディアシーン

マルチメディアソーシャルメディアアプリケーションでは、ベクトル検索を使用してユーザーが特定のコンテンツやマルチメディアデータを見つけられるように支援できます。たとえば、ユーザーが多数の画像をアップロードするソーシャルアプリでは、セマンティック検索によりコンテンツに基づいた写真検索が可能になります。「郊外での春のピクニック」や「春節の家族団らん」、「これまで見た海」などのキーワードで検索できます。これにより、アプリケーションに実用性と楽しさのあるユーザーエクスペリエンスが加わります。

クラウドドライブシーン

ベクトル検索は、個人または企業向けクラウドドライブにおいて、特定のドキュメントやアルバム内の写真など、コンテンツに基づくファイル検索を可能にし、利便性を高めます。

ビデオ監視シーン

ビデオ監視データから特定のビデオファイルを検索するためにベクトル検索を使用できます。たとえば、「雪の日の屋外監視」や「晴れた日の果樹園」などのキーワードを入力することで、対応するファイルを取得できます。

制限事項

  • リージョンの可用性

    ベクトル検索機能は、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (杭州)、中国 (上海)、中国 (深セン)、中国 (広州)、中国 (成都)、中国 (香港)、シンガポール、インドネシア (ジャカルタ)、ドイツ (フランクフルト) リージョンのバケットで利用可能です。

    説明

    音声検索は、中国 (香港)、シンガポール、インドネシア (ジャカルタ)、ドイツ (フランクフルト) リージョンではサポートされていません。

  • バケットに関する制限

    ベクトル検索が有効化されたバケットには、最大 50 億個のファイルを格納できます。バケット内のファイル数がこの上限を超える場合、検索パフォーマンスが低下する可能性があります。より大規模なデータ量を処理する必要がある場合は、テクニカルサポートまでご連絡ください。評価を実施いたします。

  • フラグメントアップロード

    フラグメントアップロードを使用する場合、検索結果には CompleteMultipartUpload 操作によって完全にアセンブルされたオブジェクトのみが含まれます。開始済みだが完了または中止されていないアップロードのパーツは結果に含まれません。

パフォーマンスリファレンス

以下は、OSS ベクトル検索のパフォーマンスメトリクスのリファレンス値です。

  • OSS が提供する内部帯域幅および秒間クエリ数 (QPS)

    OSS はベクトル検索専用の内部帯域幅および秒間クエリ数 (QPS) を提供します。この容量は最大で毎秒 1,250 件のファイルリクエストを処理でき、バケットのサービス品質 (QoS) クォータを消費しません。

    リージョン

    内部帯域幅

    デフォルト QPS

    中国 (北京)、中国 (杭州)、中国 (上海)、中国 (深セン)

    10 Gbps

    1250

    その他のリージョン

    1 Gbps

    1250

  • 既存ファイルのインデックス構築にかかる推定時間

    ベクトル検索では、インデックス構築中に List、Head、Get などの操作に対して API リクエスト料金が発生します。詳細については、「API リクエスト料金」をご参照ください。また、ビデオ、音声、ドキュメントファイルのインデックス構築は、画像ファイルよりも時間がかかります。この機能を有効化する前に、ファイル数を推定することを推奨します。

    • バケットに主に構造化データおよび画像ファイルが含まれる場合:

      • 単一バケットに 1,000 万件のファイル:2~3 時間

      • 単一バケットに 1 億件のファイル:1 日

      • 単一バケットに 10 億件のファイル:約 10 日

    • バケットに主にビデオ、ドキュメント、音声ファイルが含まれる場合:

      • 単一バケットに 1,000 万件のファイル:約 2~3 日

      • 単一バケットに 1 億件のファイル:約 7~9 日

  • 増分ファイルのインデックス更新にかかる推定時間

    バケット内の新規、変更、削除されたファイルに対する QPS がデフォルト値 1,250 未満の場合、ファイルは通常、アップロードまたは変更後数分~数時間以内に検索可能になります。QPS がデフォルト値を超える場合は、テクニカルサポートまでご連絡ください。状況を評価のうえ、サポートを提供いたします。

  • ファイル検索の応答パフォーマンス

    検索結果は数秒以内に返されます。デフォルトのタイムアウトは 30 秒です。

ベクトル検索の有効化

OSS コンソール

  1. OSS コンソールにログインします。

  2. [バケット] をクリックし、対象のバケット名をクリックします。

  3. 左側のナビゲーションウィンドウで、[ファイル] > [データインデックス] を選択します。

  4. [データインデックス] ページで、データインデックス機能を初めて使用する場合は、画面上の指示に従って AliyunMetaQueryDefaultRole ロールへの権限付与を行います。これにより、OSS がバケット内のデータを管理できるようになります。権限を付与した後、[データインデックスの有効化] をクリックします。

  5. [ベクトル検索] を選択し、[有効化] をクリックします。

    説明

    メタデータインデックスの構築には時間がかかります。所要時間はバケット内のオブジェクト数に依存します。処理に長時間かかる場合は、ページをリフレッシュしてステータスを確認できます。

Alibaba Cloud SDK

Java

Java SDK 3.18.2 以降でのみベクトル検索がサポートされています。詳細については、「ベクトル検索 (Java SDK V1)」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.MetaQueryMode;

public class OpenMetaQuery {
    public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException {
        // この例ではエンドポイントを中国 (杭州) に設定しています。実際のエンドポイントに置き換えてください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // バケット名を指定します(例: examplebucket)。
        String bucketName = "examplebucket";
        // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットが配置されているリージョンを指定します。この例では cn-hangzhou(中国 (杭州) リージョン)を使用しています。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放してください。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // ベクトル検索機能を有効化します。
            ossClient.openMetaQuery(bucketName, MetaQueryMode.SEMANTIC);
        } catch (OSSException oe) {
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            // OSSClient をシャットダウンします。
            if(ossClient != null){
                ossClient.shutdown();
            }
        }
    }
}

Python

詳細については、「ベクトル検索」をご参照ください。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサを作成し、説明を追加します。
parser = argparse.ArgumentParser(description="open meta query sample")
# バケットが配置されているリージョンを指定する必須コマンドライン引数 --region を追加します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# 操作対象のバケット名を指定する必須コマンドライン引数 --bucket を追加します。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# OSS へのアクセスに使用するドメイン名を指定するオプションのコマンドライン引数 --endpoint を追加します。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # 環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK が提供するデフォルト設定を使用します。
    cfg = oss.config.load_default()
    # 認証情報プロバイダーを設定します。
    cfg.credentials_provider = credentials_provider
    # コマンドライン引数に基づいてリージョンを設定します。
    cfg.region = args.region
    # エンドポイントが指定されている場合は、設定内のエンドポイントを更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # OSS クライアントを作成します。
    client = oss.Client(cfg)

    # バケットの AISearch 機能を有効化する OpenMetaQueryRequest を構築します。
    result = client.open_meta_query(oss.OpenMetaQueryRequest(
            bucket=args.bucket,
            mode='semantic',# AISearch を選択するには "semantic" に設定します。
    ))

    # リクエストのステータスコードおよびリクエスト ID を出力します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

# メインプログラムとして実行される際に main 関数を呼び出します。
if __name__ == "__main__":
    main()

Go

詳細については、「ベクトル検索 (Go SDK V2)」をご参照ください。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	// リージョンを指定するコマンドラインフラグを設定します。
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// バケット名を指定するコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	// バケット名が指定されているかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// クライアント構成を作成し、環境変数から認証情報を使用します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // OSS クライアントを作成します。

	// 指定されたバケットの AISearch を有効化するリクエストを作成します。
	request := &oss.OpenMetaQueryRequest{
		Bucket: oss.Ptr(bucketName),
		Mode:   oss.Ptr("semantic"), // セマンティック検索機能を有効化するには mode を "semantic" に設定します。
	}
	result, err := client.OpenMetaQuery(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to open meta query %v", err)
	}

	log.Printf("open meta query result:%#v\n", result)
}

PHP

詳細については、「ベクトル検索 (PHP SDK V2)」をご参照ください。

<?php

// 依存関係をロードするための autoload ファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターを定義および記述します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // (必須) バケットが存在するリージョン。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイント。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (必須) バケット名。
];

// 説明を getopt に必要な long options のリストに変換します。
// 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが不足している場合はプログラムを終了します。
    }
}

// コマンドラインパラメーターから解析された値を対応する変数に代入します。
$region = $options["region"]; // バケットが存在するリージョン。
$bucket = $options["bucket"]; // バケット名。

// 環境変数からアクセス認証情報を読み込みます。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID および AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが存在するリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、エンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// AISearch 機能を有効化します。
$request = new Oss\Models\OpenMetaQueryRequest($bucket,'semantic');
$result = $client->openMetaQuery($request);

printf(
   'status code:' . $result->statusCode . PHP_EOL .
   'request id:' . $result->requestId
);

ossutil

以下のコマンドは、examplebucket という名前のバケットに対してベクトル検索を有効化する例です。

ossutil api open-meta-query --bucket examplebucket --meta-query-mode semantic

ossutil を使用したベクトル検索の詳細については、「open-meta-query」をご参照ください。

ベクトル検索の実行

OSS コンソール

このセクションでは、「輝く建物」を含み、JPG 形式で、サイズが 800 × 1,200 ピクセル以内のファイルを検索する例を紹介します。期待される検索結果は、次の図に示す「川辺の夜景.jpg」画像です。

江边的夜景

  1. OSS コンソールにログインします。

  2. [バケット] をクリックし、対象のバケット名をクリックします。

  3. 左側のナビゲーションウィンドウで、[ファイル] > [データインデックス] を選択します。

  4. [検索条件] を設定します。その他のパラメーターはデフォルト設定のままにしてください。

    • [セマンティックコンテンツ] セクションで、画像の説明(例: glowing buildings)を入力します。image

    • [マルチメディアタイプ] で、[画像] を選択します。

      • [画像フォーマット] を JPG/JPEG に設定します。

      • [画像幅] を 800px 未満に設定します。

      • [画像高さ] を 1200px 未満に設定します。

      image

  5. [今すぐ検索] をクリックします。検索結果は期待どおりであり、特徴の説明に基づいてファイルが正常に見つかりました。

    image

    すべての検索条件および出力設定の詳細については、「検索条件および出力設定」をご参照ください。

Alibaba Cloud SDK

Java

Java SDK 3.18.2 以降でのみベクトル検索がサポートされています。詳細については、「ベクトル検索 (Java SDK V1)」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.ArrayList;
import java.util.List;

public class DoMetaQuery {
    public static void main(String[] args) throws Exception {
        // この例ではエンドポイントを中国 (杭州) に設定しています。実際のエンドポイントに置き換えてください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // バケット名を指定します(例: examplebucket)。
        String bucketName = "examplebucket";
        // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットが配置されているリージョンを指定します。この例では cn-hangzhou(中国 (杭州) リージョン)を使用しています。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放してください。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            int maxResults = 20;
            List<String> mediaTypes = new ArrayList<String>();
            mediaTypes.add("image");
            String query = "Snow";
            String simpleQuery = "{\"Operation\":\"gt\", \"Field\": \"Size\", \"Value\": \"30\"}";
            String sort = "Size";
            DoMetaQueryRequest doMetaQueryRequest = new DoMetaQueryRequest(bucketName, maxResults, query, sort, MetaQueryMode.SEMANTIC, mediaTypes, simpleQuery);
            DoMetaQueryResult doMetaQueryResult = ossClient.doMetaQuery(doMetaQueryRequest);
        } catch (OSSException oe) {
            System.out.println("Error Message: " + oe.getErrorMessage());
            System.out.println("Error Code:       " + oe.getErrorCode());
            System.out.println("Request ID:      " + oe.getRequestId());
            System.out.println("Host ID:           " + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            if(ossClient != null){
                ossClient.shutdown();
            }
        }
    }
}

Python

詳細については、「ベクトル検索」をご参照ください。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン入力を処理するためのコマンドライン引数パーサを作成します。
parser = argparse.ArgumentParser(description="do meta query semantic sample")
# 必要なコマンドライン引数を追加します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)  # バケットが配置されているリージョン。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)  # バケット名。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')  # OSS ドメイン名(オプション)。

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # 環境変数からアクセス認証情報を読み込みます。
    # 実行前に環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET を設定する必要があります。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードします。
    cfg = oss.config.load_default()
    # 認証情報プロバイダーを設定します。
    cfg.credentials_provider = credentials_provider
    # リージョンを設定します。
    cfg.region = args.region
    # エンドポイントが指定されている場合は、設定内のエンドポイントを更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # OSS クライアントインスタンスを作成します。
    client = oss.Client(cfg)

    # AISearch モードでメタデータクエリリクエストを開始します。
    result = client.do_meta_query(oss.DoMetaQueryRequest(
            bucket=args.bucket,
            mode='semantic',
            meta_query=oss.MetaQuery(
                max_results=1000,
                query='An aerial view of a snow-covered forest',
                order='desc',
                media_types=oss.MetaQueryMediaTypes(
                    media_type=['image']
                ),
                simple_query='{"Operation":"gt", "Field": "Size", "Value": "30"}',
            ),
    ))

    # 取得結果を出力します。
    print(vars(result))

if __name__ == "__main__":
    main()

Go

詳細については、「ベクトル検索 (Go SDK V2)」をご参照ください。

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	// リージョンを指定するコマンドラインフラグを設定します。
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// バケット名を指定するコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	// バケット名が指定されているかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// クライアント構成を作成し、環境変数および指定されたリージョンから認証情報を使用します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // OSS クライアントを作成します。

	// AISearch 操作を実行します。
	request := &oss.DoMetaQueryRequest{
		Bucket: oss.Ptr(bucketName),
		Mode:   oss.Ptr("semantic"),
		MetaQuery: &oss.MetaQuery{
			MaxResults: oss.Ptr(int64(99)),
			Query:      oss.Ptr("Overlook the snow-covered forest"), // セマンティッククエリ文字列を指定します(例)。
			MediaTypes: &oss.MetaQueryMediaTypes{
				MediaTypes: []string{"image"}, // 検索対象のメディアタイプを指定します(この例では "image")。
			},
			SimpleQuery: oss.Ptr(`{"Operation":"gt", "Field": "Size", "Value": "30"}`),
		},
	}
	result, err := client.DoMetaQuery(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to do meta query %v", err)
	}

	log.Printf("do meta query result:%#v\n", result)
}

PHP

詳細については、「ベクトル検索 (PHP SDK V2)」をご参照ください。

<?php

// 依存ライブラリが正しくロードされるように autoloader ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数の説明を定義します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // バケットが配置されているリージョン。このパラメーターは必須です。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 他のサービスが OSS にアクセスするために使用できるエンドポイント。このパラメーターはオプションです。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // バケット名。このパラメーターは必須です。
];

// 引数の説明を getopt に必要な long option 形式に変換します。
// 各引数の後にコロン (:) を付けて、引数に値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須引数が指定されているかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // 引数のヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須引数が指定されていない場合はプログラムを終了します。
    }
}

// 解析された引数から値を抽出します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケット名。

// 環境変数から認証情報を読み込みます。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から Access Key ID および Access Key Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、エンドポイントを設定します。
}

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 指定された条件を満たすオブジェクトに対して AISearch クエリを実行します。
$request = new Oss\Models\DoMetaQueryRequest($bucket, new Oss\Models\MetaQuery(
    maxResults: 99,
    query: "Overlook the snow-covered forest",
    mediaTypes: new Oss\Models\MetaQueryMediaTypes('image'),
    simpleQuery: '{"Operation":"gt", "Field": "Size", "Value": "30"}',
), 'semantic');

$result = $client->doMetaQuery($request);
printf(
    'status code:' . $result->statusCode . PHP_EOL .
    'request id:' . $result->requestId . PHP_EOL .
    'result:' . var_export($result, true)
);

ossutil

以下のコマンドは、examplebucket という名前のバケット内で指定された条件を満たすファイルをクエリする例です。

ossutil api do-meta-query --bucket examplebucket --meta-query "{\"Query\":\"Overlooking the snow covered forest\",\"MediaTypes\":{\"MediaType\":\"image\"},\"SimpleQuery\":\"{\\\"Operation\\\":\\\"gt\\\", \\\"Field\\\": \\\"Size\\\", \\\"Value\\\": \\\"1\\\"}\"}" --meta-query-mode semantic

このコマンドの詳細については、「do-meta-query」をご参照ください。

ベクトル検索の無効化

  • この機能を無効化しても、OSS に保存されているデータには影響しません。再度機能を有効化した場合、システムは既存のファイルを再スキャンしてインデックスを再構築します。この処理には、ファイル数に応じて時間がかかります。

  • 課金は機能を無効化した後の 1 時間単位で停止します。ただし、請求書の生成に遅延が生じる場合があります。最新の情報を確認するには、請求書をモニタリングしてください。

OSS コンソール

OSS コンソールにログインします。[データインデックス] ページで、ベクトル検索の横にある [無効化] をクリックし、画面の指示に従って操作を確定します。

image

Alibaba Cloud SDK

Java

Java SDK 3.18.2 以降でのみベクトル検索がサポートされています。詳細については、「ベクトル検索 (Java SDK V1)」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;

public class CloseMetaQuery {
    public static void main(String[] args) throws Exception {
        // この例ではエンドポイントを中国 (杭州) に設定しています。実際のエンドポイントに置き換えてください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // バケット名を指定します(例: examplebucket)。
        String bucketName = "examplebucket";
        // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットが配置されているリージョンを指定します。この例では cn-hangzhou(中国 (杭州) リージョン)を使用しています。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放してください。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // バケットのベクトル検索機能を無効化します。
            ossClient.closeMetaQuery(bucketName);
        } catch (OSSException oe) {
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            // OSSClient をシャットダウンします。
            if(ossClient != null){
                ossClient.shutdown();
            }
        }
    }
}

Python

詳細については、「ベクトル検索」をご参照ください。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数を処理するためのコマンドライン引数パーサを作成します。
parser = argparse.ArgumentParser(description="close meta query sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # 環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を使用します。
    cfg = oss.config.load_default()
    # 環境変数から取得した認証情報を認証情報プロバイダーとして設定します。
    cfg.credentials_provider = credentials_provider
    # 構成情報にリージョン情報を設定します。
    cfg.region = args.region
    # エンドポイントが指定されている場合は、構成情報内のエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # OSS クライアントを作成します。
    client = oss.Client(cfg)

    # close_meta_query メソッドを呼び出して、バケットの取得機能を無効化します。
    result = client.close_meta_query(oss.CloseMetaQueryRequest(
            bucket=args.bucket,
    ))

    # 応答のステータスコードおよびリクエスト ID を出力します。
    print(f'status code: {result.status_code}, request id: {result.request_id}')

# このスクリプトが直接実行された際に main 関数を実行します。
if __name__ == "__main__":
    main()

Go

詳細については、「ベクトル検索 (Go SDK V2)」をご参照ください。

package main

import (
	"context"
	"flag"    
	"log"    

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"          
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" 
)

var (
	region     string
	bucketName string
)

func init() {
	// リージョンを指定するコマンドラインフラグを設定します。
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// バケット名を指定するコマンドラインフラグを設定します。
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}


func main() {
	flag.Parse()

	// バケット名が指定されているかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// クライアント構成を作成し、環境変数および指定されたリージョンから認証情報を使用します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // OSS クライアントを作成します。

	// 指定されたバケットの AISearch を無効化するリクエストを作成します。
	request := &oss.CloseMetaQueryRequest{
		Bucket: oss.Ptr(bucketName), // 対象バケットを指定します。
	}
	result, err := client.CloseMetaQuery(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to close meta query %v", err)
	}

	log.Printf("close meta query result:%#v\n", result)
}

PHP

詳細については、「ベクトル検索 (PHP SDK V2)」をご参照ください。

<?php

// 依存ライブラリが正しくロードされるように autoloader ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数の説明を定義します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // バケットが配置されているリージョン。このパラメーターは必須です。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 他のサービスが OSS にアクセスするために使用できるエンドポイント。このパラメーターはオプションです。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // バケット名。このパラメーターは必須です。
];

// 引数の説明を getopt に必要な long option 形式に変換します。
// 各引数の後にコロン (:) を付けて、引数に値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須引数が指定されているかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // 引数のヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須引数が指定されていない場合はプログラムを終了します。
    }
}

// 解析された引数から値を抽出します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケット名。

// 環境変数から認証情報を読み込みます。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から Access Key ID および Access Key Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、エンドポイントを設定します。
}

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// バケットの取得機能を無効化するための CloseMetaQueryRequest オブジェクトを作成します。
$request = new \AlibabaCloud\Oss\V2\Models\CloseMetaQueryRequest(
    bucket: $bucket
);

// 取得機能の無効化操作を実行します。
$result = $client->closeMetaQuery($request);

// 取得機能の無効化結果を出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード(例: 200 はリクエスト成功を示します)。
    'request id:' . $result->requestId . PHP_EOL     // デバッグまたはリクエスト追跡に使用されるリクエスト ID。
);

ossutil

以下のコマンドは、examplebucket という名前のバケットに対してベクトル検索機能を無効化する例です。

ossutil api close-meta-query --bucket examplebucket

このコマンドの詳細については、「close-meta-query」をご参照ください。

検索条件および出力設定

検索条件

以下は利用可能なすべての検索条件です。必要に応じて 1 つ以上の検索条件を設定できます。

OSS メタデータ検索条件

条件

説明

ストレージクラス

クエリ結果に含めるオブジェクトのストレージクラスを選択できます。

  • セマンティックコンテンツを検索条件として設定する場合、標準および低頻度アクセス (IA) ストレージクラスのみがサポートされます。

  • セマンティックコンテンツを検索条件として設定しない場合、標準、低頻度アクセス (IA)、アーカイブ、コールドアーカイブ、ディープコールドアーカイブストレージの各ストレージクラスがデフォルトでサポートされます。

アクセス制御リスト (ACL)

デフォルトでは、OSS がサポートする 4 つの ACL(バケットから継承、プライベート、パブリック読み取り、パブリック読み取り/書き込み)が選択されています。クエリ結果に含めるオブジェクトの ACL を選択できます。

ファイル名

[あいまい一致] および [完全に一致] がサポートされています。たとえば、exampleobject.txt という特定のファイルをクエリ結果に表示したい場合、次のいずれかの方法でファイルを一致させられます。

  • [完全に一致] を選択し、ファイル名全体 exampleobject.txt を入力します。

  • [あいまい一致] を選択し、ファイルのプレフィックスまたはサフィックス(例: example または .txt)を入力します。

    重要

    あいまい一致では、オブジェクト名の任意の部分文字列に一致します。たとえば、test を入力すると、クエリ結果には localfolder/test/.example.jpglocalfolder/test.jpg などのオブジェクトが含まれます。

アップロードタイプ

オブジェクトタイプ別にクエリできます。OSS は以下のタイプをサポートしており、すべてデフォルトで選択されています。

  • 通常: シンプルアップロードによって作成されたオブジェクト。

  • マルチパート: マルチパートアップロードによって作成されたオブジェクト。

  • [追加可能]:追加アップロードによって作成されたオブジェクト。

  • [シンボリックリンク]: オブジェクトへのクイックアクセスを提供するシンボリックリンク。

最終更新日時

オブジェクトが最後に変更された期間の[開始日時][終了日時]を指定します。時刻は秒まで正確です。

ファイルサイズ

5 つのフィルター条件がサポートされています:[完全に一致][より大きい][以上][より小さい]、および [以下]。ファイルサイズは KB 単位で測定されます。

オブジェクトバージョン

オブジェクトの現在のバージョンのみをクエリできます。

オブジェクトの ETag およびタグ検索条件

ETag およびタグを使用してオブジェクトをフィルターするには、取得対象のオブジェクトの ETag またはタグ情報を入力します。

  • ETag は完全一致のみをサポートします。ETag は引用符で囲む必要があります。例:"5B3C1A2E0563E1B002CC607C6689"。複数の ETag を 1 行ずつ入力できます。

  • オブジェクトのタグ はキーと値のペアで指定します。オブジェクトタグのキーと値は大文字と小文字を区別します。タグのルールの詳細については、「オブジェクトタグ付け」をご参照ください。

マルチメディアメタデータ検索条件

[画像][ドキュメント][音声]、および [ビデオ] ファイルの特定のプロパティに基づいて結果をフィルターできます。

条件

説明

画像

  • サポートされるフォーマット:JPG/JPEG、PNG、APNG、BMP、GIF、WEBP、TIFF、HEIC、HEIC-SEQUENCE、AVIF。

  • 画像の幅と高さ:ピクセル (px) 単位で幅と高さの範囲を設定できます。

ドキュメント

  • サポートされるフォーマット:DOC、DOCX、PPTX、PPT、XLS、XLSX、PDF、RTF、TXT、LOG、XML、HTML。

ビデオ

  • サポートされるフォーマット:AVI、MPEG、MPG、RM、MOV、WMV、3GP、MP4、FLV、MKV、TS。

  • ビデオ解像度:ピクセル (px) 単位でビデオ解像度の範囲を設定できます。

  • ビデオの持続時間:秒 (s) 単位で持続時間の範囲を設定できます。

  • ビデオのビットレート:キロビット/秒 (kbps) 単位でビットレートの範囲を設定できます。

音声

  • サポートされるフォーマット:MP3、WMA、OGG、RA、MIDI、AIF/AIFF、M4A、MKA、MP2。

  • 音声の持続時間:秒 (s) 単位で持続時間の範囲を設定できます。

セマンティックコンテンツ検索条件

セマンティックコンテンツを入力して、関連する画像、ドキュメント、ビデオ、または音声リソースを迅速に取得できます。

  • 特定のコンテンツを含むファイルを検索します。検索クエリは 40 文字以内に制限されています。たとえば、「雪景色の故宮の写真」や「ワイヤレスプリンターの使い方」などで検索できます。

  • セマンティックコンテンツ検索の制限事項:

    • [オブジェクトソート方法] または [データ集約] の出力方法を設定できません。

    • 必ず 1 つの [マルチメディアメタデータ検索条件] セットを選択する必要があります。

    • Key Management Service (KMS) の Bring Your Own Key (BYOK) 機能を使用して暗号化されたオブジェクトの検索はサポートされていません。

カスタムメタデータ検索条件

カスタムメタデータのキーと値のペアを入力して、結果を正確に取得できます。

  • [オブジェクトのメタデータ] はキーと値のペアで指定します。カスタムメタデータの詳細については、「オブジェクトメタデータの管理」をご参照ください。

  • 複数のキーと値のペアを追加できます。キーと値の両方が必須です。最大 20 組のカスタムペアがサポートされています。

結果出力設定

セマンティックコンテンツで検索する場合、ソート方法を指定したり、データ集約を使用したりすることはできません。

出力結果をソートしたり、簡単な統計分析を実行したりできます。

  • [オブジェクトソート方法]:結果を最終更新日時、ファイル名、またはファイルサイズで昇順または降順にソートできます。必要に応じて検索結果をソートして、必要なファイルを迅速に見つけられます。

  • [データ集約]:検索結果に対して、個別カウント、グループ別カウント、最大値・最小値・平均値・合計の計算などの操作を実行できます。これにより、効率的なデータ分析および管理が可能になります。

API リファレンス

前述の操作は API オペレーションに基づいて実装されています。アプリケーションに非常に特殊な要件がある場合は、REST API を直接呼び出すことができます。REST API を直接呼び出す場合は、署名を計算するコードを手動で記述する必要があります。

ベクトル検索機能の有効化方法の詳細については、「OpenMetaQuery」をご参照ください。

指定された条件を満たすファイルのクエリ方法の詳細については、「DoMetaQuery」をご参照ください。

ベクトル検索機能の無効化方法の詳細については、「CloseMetaQuery」をご参照ください。

課金

  • ベクトル検索の料金は、主に以下の 2 つの部分で構成されます。

    • ベクトル検索機能料金

      これはオブジェクトのメタデータ管理に関する料金です。OSS データインデックスの価格に基づいて課金されます。詳細については、「データインデックス料金」をご参照ください。

    • API リクエスト料金

      既存ファイルのインデックス構築および増分ファイルのインデックス更新中に API リクエスト料金が発生します。API 呼び出し回数に基づいて課金されます。呼び出される API オペレーションは以下のとおりです。

      操作

      API

      バケット内のファイルのインデックスを構築します。

      HeadObject および GetObject

      バケットにタグ付きファイルが含まれている場合。

      GetObjectTag

      バケットにカスタムメタデータ付きファイルが含まれている場合。

      GetObjectMeta

      バケットにシンボリックリンクファイルが含まれている場合。

      GetSymlink

      バケット内のファイルをスキャンします。

      ListObjects

      OSS API リクエスト料金の詳細については、「リクエスト料金」をご参照ください。

  • 関連する課金を停止したい場合は、速やかに「ベクトル検索の無効化」を行ってください。

よくある質問

アップロード直後にファイルが見つからないのはなぜですか?

新しくアップロードされたファイルのインデックス生成には時間がかかるため、検索結果に表示されるまでに遅延が生じます。すぐにファイルが見つからない場合は、しばらく待ってから再度検索を試してください。