OSS のベクトル検索を使用すると、セマンティックコンテンツ、OSS メタデータ、マルチメディアメタデータ、オブジェクトの ETag、タグ、カスタムメタデータに基づいて、大量のオブジェクトコレクションからオブジェクトファイルを迅速に見つけることができます。この機能により、検索効率が向上します。
注意事項
Java ソフトウェア開発キット (SDK) バージョン 3.18.2 以降のみがベクトル検索機能をサポートしています。
ベクトル検索機能は、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (杭州)、中国 (上海)、中国 (深セン)、中国 (広州)、中国 (成都)、中国 (香港)、シンガポール、インドネシア (ジャカルタ)、ドイツ (フランクフルト)、米国 (バージニア)、米国 (シリコンバレー) の各リージョンのバケットでサポートされています。
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用してください。サポートされているリージョンとエンドポイントの詳細については、リージョンとエンドポイントをご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、アクセス認証情報の設定をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、一般的なシナリオの設定例をご参照ください。
デフォルトでは、Alibaba Cloud アカウントには、データインデックス作成操作を実行するために必要な権限が付与されています。Resource Access Management (RAM) ユーザーまたは STS を使用してデータインデックス作成操作を実行する場合は、次の権限が必要です:
メタデータ管理機能を有効にするには、
oss:OpenMetaQuery権限が必要です。メタデータインデックスに関する情報を取得するには、
oss:GetMetaQueryStatus権限が必要です。指定された条件を満たすオブジェクトをクエリするには、
oss:DoMetaQuery権限が必要です。メタデータ管理機能を無効にするには、
oss:CloseMetaQuery権限が必要です。
サンプルコード
ベクトル検索機能の有効化
次のコードは、指定されたバケットのベクトル検索機能を有効にする方法の例を示しています。
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();
}
}
}
}
メタデータインデックス情報の取得
次のコードは、指定されたバケットのメタデータインデックスに関する情報を取得する方法の例を示しています。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetMetaQueryStatusResult;
public class GetMetaQueryStatus {
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 {
// 指定されたバケットのメタデータインデックスに関する情報を取得します。
GetMetaQueryStatusResult getResult = ossClient.getMetaQueryStatus(bucketName);
// 現在の検索パターンを取得します。
System.out.println(getResult.getMetaQueryMode().toString());
// 現在のスキャンタイプを取得します。
System.out.println(getResult.getPhase());
// メタデータインデックスのステータスを取得します。
System.out.println(getResult.getState());
// メタデータインデックスが作成された時刻を取得します。
System.out.println(getResult.getCreateTime());
// メタデータインデックスが最後に更新された時刻を取得します。
System.out.println(getResult.getUpdateTime());
} 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();
}
}
}
}
指定条件を満たすオブジェクトのクエリ
次のコードは、ベクトル検索機能を使用して、指定されたセマンティックコンテンツに一致するオブジェクトをクエリする方法の例を示しています。
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();
}
}
}
}
ベクトル検索機能の無効化
次のコードは、指定されたバケットのベクトル検索機能を無効にする方法の例を示しています。
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();
}
}
}
}
関連ドキュメント
メタデータ管理機能を有効にする API 操作の詳細については、OpenMetaQuery をご参照ください。
メタデータインデックスに関する情報を取得する API 操作の詳細については、GetMetaQueryStatus をご参照ください。
指定された条件を満たすオブジェクトをクエリする API 操作の詳細については、DoMetaQuery をご参照ください。
メタデータ管理機能を無効にする API 操作の詳細については、CloseMetaQuery をご参照ください。