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

Object Storage Service:ベクトル検索を使用して、セマンティックコンテンツとマルチメディア機能によってファイルを迅速に検索する

最終更新日:Nov 09, 2025

OSS ベクトル検索を使用すると、セマンティックコンテンツ、OSS メタデータ、マルチメディアメタデータ、オブジェクトの ETag とタグ、カスタムメタデータなどの基準に基づいて、膨大な数のオブジェクトからオブジェクトファイルを迅速に検索できます。この機能は検索効率を最適化します。

シナリオ

個人および企業のオフィスシナリオ

ベクトル検索を使用すると、特定のセマンティックコンテンツでオフィスファイルを直接検索できます。たとえば、「ERP システムの使用法」、「IT 修理プロセス」、「2024 年の業績分析」などのキーワードで検索できます。これにより、ファイルの検索が簡素化され、オフィスの効率が向上します。

マルチメディアソーシャルメディアシナリオ

マルチメディアソーシャルメディアシナリオでは、検索機能を使用して、特定のコンテンツやマルチメディアデータの検索機能をユーザーに提供できます。たとえば、ユーザーが大量の画像データをアップロードするソーシャルメディアアプリケーションでは、セマンティック検索により、ユーザーはコンテンツに基づいて画像を直接検索できます。たとえば、「郊外での春の遠足」、「春節の再会」、「私が見た海」などのコンテンツを含む写真を検索できます。これにより、アプリケーションに実用性と楽しさが加わります。

クラウドドライブシナリオ

現在、ほとんどのクラウドドライブは、スカラー検索に基づくファイル検索を提供しており、ファイル名、作成時間、またはファイル拡張子で検索できます。個人または企業のクラウドドライブシナリオでは、ベクトル検索機能を使用して、関連ドキュメントやアルバム内の写真など、特定のコンテンツを検索できます。

ビデオ監視シナリオ

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

制限事項

  • リージョンの制限

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

    説明

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

  • バケットの制限

    ベクトル検索が有効になっているバケットには、最大 50 億個のファイルを含めることができます。バケット内のファイル数が 50 億を超えると、検索パフォーマンスが低下する可能性があります。より大量のデータを処理するには、評価のためにテクニカルサポートにお問い合わせください。

  • マルチパートアップロード

    CompleteMultipartUpload 操作を使用してパーツからアセンブルされた完全なオブジェクトのみが検索結果に表示されます。開始されたが完了または中止されていないアップロードのパーツは結果に表示されません。

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

以下の OSS ベクトル検索モードのパフォーマンスメトリックは参考用です。

  • OSS が提供する内部帯域幅と QPS

    内部帯域幅と 1 秒あたりのクエリ数 (QPS) は、毎秒 1,250 件のファイルリクエストを処理できます。この容量はベクトル検索モードに加えて提供され、バケットのサービス品質 (QoS) を消費しません。

    リージョン

    内部帯域幅

    デフォルト QPS

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

    10 Gbps

    1250

    その他のリージョン

    1 Gbps

    1250

  • 既存のファイルインデックス生成時間のリファレンス

    ベクトル検索モードのインデックス構築中に、List、Head、Get などの API 呼び出しに対してリクエスト料金が発生します。さらに、ビデオ、オーディオ、ドキュメントファイルのインデックス生成は、画像ファイルよりも時間がかかります。この機能を使用する前に、ファイル数を見積もる必要があります。

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

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

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

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

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

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

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

  • 増分ファイルインデックス更新時間のリファレンス

    バケット内の新規、変更、または削除されたファイルの QPS がデフォルト値の 1,250 未満の場合、ファイルのアップロードまたは変更からファイルが検索可能になるまでのレイテンシは通常、数分から数時間です。QPS がデフォルト値の 1,250 を超える場合は、テクニカルサポートにお問い合わせください。状況を評価し、技術サポートを提供します。

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

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

ベクトル検索を有効にする

OSS コンソールを使用する

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

  2. [バケット] をクリックし、ターゲットバケットの名前をクリックします。

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

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

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

    説明

    メタデータインデックスの構築には時間がかかります。所要時間はバケット内のオブジェクト数によって異なります。プロセスに時間がかかりすぎる場合は、ページを更新して有効化ステータスを確認できます。

Alibaba Cloud SDK を使用する

Java

Java SDK 3.18.2 以降のバージョンのみがベクトル検索機能をサポートしています。詳細については、「ベクトル検索 (Java SDK)」をご参照ください。

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 {
            // AISearch を有効にします。
            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)

    # OpenMetaQueryRequest をビルドして、バケットの AISearch 機能を有効にします。
    result = client.open_meta_query(oss.OpenMetaQueryRequest(
            bucket=args.bucket,
            mode='semantic',# "semantic" に設定して AISearch を選択します。
    ))

    # リクエストのステータスコードとリクエスト 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
)

// init 関数は、プログラムを初期化するために main 関数の前に実行されます。
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) // クライアント設定を使用して新しい OSSClient インスタンスを作成します。

	// 特定のバケットに対して AISearch を有効にするための OpenMetaQuery リクエストを作成します。
	request := &oss.OpenMetaQueryRequest{
		Bucket: oss.Ptr(bucketName),
		Mode: oss.Ptr("semantic"), // Mode を semantic に設定します。これは AISearch が有効であることを指定します。
	}
	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 が要求する長いオプションのリストに変換します。
// 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
$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

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

ベクトル検索を開始する

OSS コンソールの使用

このセクションでは、「glowing buildings」を含み、JPG フォーマットで、幅と高さが 800 × 1200 ピクセル以内のファイルを検索する方法の例を示します。期待される検索結果は、次の図に示す「Night view by the river.jpg」イメージです。

A night view of a city by a river

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

  2. [バケット] をクリックし、次にターゲットバケットの名前をクリックします。

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

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

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

    • [マルチメディアタイプ] には、[イメージ] を選択します。

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

      • [イメージの幅] を 800 px 未満に設定します。

      • [イメージの高さ] を 1200 px 未満に設定します。

      image

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

    image

    完全な検索条件と出力設定の詳細については、「検索条件と出力設定」をご参照ください。

Alibaba Cloud SDK の使用

Java

Java SDK 3.18.2 以降のバージョンのみがベクトル検索機能をサポートします。詳細については、「ベクトル検索 (Java SDK)」をご参照ください。

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 mediaTypes = new ArrayList();
            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) // クライアント設定を使用して新しい OSSClient インスタンスを作成します。

	// 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"), // セマンティックコンテンツを指定します。
			MediaType: oss.Ptr("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

// 依存ライブラリが正しく読み込まれるように、オートローダーファイルをインポートします。
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 で必要なロングオプション形式に変換します。
// 各引数の後のコロン (:) は、引数に値が必要であることを示します。
$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 を使用して、環境変数からアクセスキー ID とアクセスキーシークレットを読み取ります。
$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)」をご参照ください。

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 {
            // バケットの AISearch を無効にします。
            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) // 新しい OSSClient インスタンスを作成します。

	// CloseMetaQuery リクエストを作成して、特定のバケットのメタデータ管理機能を無効にします。
	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

// 依存ライブラリが正しく読み込まれるように、オートローダーファイルをインポートします。
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 で必要なロングオプション形式に変換します。
// 各引数の後のコロン (:) は、引数に値が必要であることを示します。
$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 を使用して、環境変数からアクセスキー ID とアクセスキーシークレットを読み取ります。
$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) 、アーカイブ、コールドアーカイブ、およびディープコールドアーカイブのストレージタイプがサポートされます。

アクセスコントロールリスト (ACL)

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

ファイル名

[あいまい一致][完全一致] をサポートしています。クエリ結果に特定のファイル名 (例: exampleobject.txt) を表示させたい場合、次の 2 つの方法のいずれかでオブジェクトファイルを照合できます:

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

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

    重要

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

アップロードタイプ

デフォルトでは、OSS でサポートされている 4 つのオブジェクトタイプが選択されています。必要に応じて、クエリ結果に表示するオブジェクトタイプを選択できます。オブジェクトタイプは次のように説明されます:

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

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

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

  • シンボリックリンク: オブジェクトへの迅速なアクセスのために作成されたシンボリックリンク。

最終更新日時

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

ファイルサイズ

5 つのフィルター条件をサポートしています: [次と等しい][次より大きい][次以上][次より小さい][次以下]。ファイルサイズの単位は KB です。

オブジェクトバージョン

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

オブジェクトの ETag とタグの検索条件

ETag とタグでオブジェクトをフィルターするには、取得したいオブジェクトの ETag またはタグ情報を入力します。

  • ETag は完全一致のみをサポートします。ETag は引用符で囲む必要があります。例: "5B3C1A2E0563E1B002CC607C6689"。複数の ETag を 1 行に 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 つだけ選択する必要があります。

    • KMS の Bring-Your-Own-Key (BYOK) で暗号化されたオブジェクトの検索はサポートされていません。

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

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

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

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

結果の出力設定

「セマンティックコンテンツ検索条件」を設定した後は、ソートメソッドやデータ集約を指定できません。

出力結果に対してソートや簡単な統計を実行できます。

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

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

関連する API 操作

前述の操作は API 操作に基づいています。プログラムに高度にカスタマイズされた要件がある場合は、REST API を直接呼び出すことができます。REST API を直接呼び出すには、手動でコードを記述して署名を計算する必要があります。

メタデータ管理機能を有効にする方法の詳細については、「OpenMetaQuery」をご参照ください。

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

メタデータ管理機能を無効にする方法の詳細については、「CloseMetaQuery」をご参照ください。

課金

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

    • ベクトル検索機能料金 (パブリックプレビュー期間中は無料)

      これには、オブジェクトメタデータ管理料金が含まれます。この機能は現在パブリックプレビュー中であり、無料です。課金は、2025 年 8 月 25 日にパブリックプレビューが終了した後に正式に開始されます。パブリックプレビューが終了すると、OSS データインデックス作成の料金に基づいて課金されます。詳細については、「データインデックス作成料金」をご参照ください。

    • API リクエスト料金

      API リクエスト料金は、既存のファイルのインデックス構築および増分ファイルのインデックス更新中に発生します。API 呼び出しの数に基づいて課金されます。関連する API リクエストは次のとおりです。

      動作

      API

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

      HeadObject および GetObject

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

      GetObjectTag

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

      GetObjectMeta

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

      GetSymlink

      バケット内のファイルをスキャン

      ListObjects

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

  • これらの料金の発生を停止したい場合は、ベクトル検索を無効にする必要があります。

よくある質問

ファイルをアップロードした直後に見つけられないのはなぜですか。

ファイルがアップロードされた後、そのファイルのインデックスが生成されるまでに時間がかかります。そのため、ファイルが検索結果に表示されるまでに遅延が生じます。ファイルをすぐに取得できない場合があります。しばらく待ってから、もう一度お試しください。