AISearch を使用すると、セマンティックコンテンツ、オブジェクトのメタデータ、マルチメディアメタデータ、オブジェクトの ETag とタグ、カスタムメタデータなどの条件に基づいて、多数のオブジェクトの中からターゲットオブジェクトをすばやく検索できます。AISearch は検索効率を向上させます。この Topic では、Object Storage Service (OSS) SDK for Go 2.0 を使用して AISearch を実行する方法について説明します。
使用上の注意
この Topic のサンプルコードでは、中国 (杭州) リージョン (
cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットと同じリージョンにある他の Alibaba Cloud サービスからリソースにアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックでは、環境変数から取得したアクセス認証情報を使用しています。アクセス認証情報の構成方法の詳細については、「アクセス認証情報を構成する」をご参照ください。
例
AISearch 機能の有効化
次のサンプルコードは、バケットに対して AISearch を有効にする方法の例を示しています。
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(®ion, "region", "", "バケットが配置されているリージョン。")
// コマンドラインパラメータを使用してバケット名を指定します。
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケット名が指定されているかどうかを確認します。バケット名が指定されていない場合は、デフォルトのパラメータを返し、プログラムを終了します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。リージョンが指定されていない場合は、デフォルトのパラメータを返し、プログラムを終了します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// クライアントを作成および構成し、環境変数を使用して認証プロバイダーを渡します。
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("メタクエリの開始に失敗しました %v", err)
}
log.Printf("メタクエリの開始結果: %#v\n", result) // リクエストの結果を表示します。
}
バケットのメタデータインデックスライブラリを照会する
次のサンプルコードは、バケットのメタデータインデックスライブラリを照会する方法の例を示しています。
package main
// 必要なパッケージをインポートします
import (
"context" // context パッケージ
"flag" // flag パッケージ
"log" // 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(®ion, "region", "", "バケットが配置されているリージョン。")
// コマンドラインパラメータを使用してバケット名を指定します。
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケット名が指定されているかどうかを確認します。バケット名が指定されていない場合は、デフォルトのパラメータを返し、プログラムを終了します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。") // エラーを記録し、プログラムを終了します。
}
// リージョンが指定されているかどうかを確認します。リージョンが指定されていない場合は、デフォルトのパラメータを返し、プログラムを終了します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。") // エラーを記録し、プログラムを終了します。
}
// クライアントを作成および構成し、環境変数を使用して認証プロバイダーとリージョンを渡します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // 新しい OSSClient インスタンスを作成します。
// 特定のバケットのメタデータインデックスライブラリを照会する GetMetaQueryStatus リクエストを作成します。
request := &oss.GetMetaQueryStatusRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前を指定します。
}
result, err := client.OpenMetaQuery(context.TODO(), request) // 特定のバケットのメタデータインデックスライブラリを照会するリクエストを実行します。
if err != nil {
log.Fatalf("メタクエリステータスの取得に失敗しました %v", err)
}
log.Printf("メタクエリステータスの取得結果: %#v\n", result)
}
特定の条件を満たすオブジェクトを照会する
次のサンプルコードは、AISearch を使用して特定のセマンティック条件を満たすオブジェクトを照会する方法の例を示しています。
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(®ion, "region", "", "バケットが配置されているリージョン。")
// コマンドラインパラメータを使用してバケット名を指定します。デフォルトでは、パラメータは空の文字列です。
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケット名が指定されているかどうかを確認します。バケット名が指定されていない場合は、デフォルトのパラメータを返し、プログラムを終了します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。リージョンが指定されていない場合は、デフォルトのパラメータを返し、プログラムを終了します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// クライアントを作成および構成し、環境変数を使用して認証プロバイダーとリージョンを渡します。
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("雪に覆われた森を見下ろす"), // セマンティックコンテンツを指定します。
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("メタクエリの開始に失敗しました %v", err)
}
log.Printf("メタクエリの開始結果: %#v\n", result)
}
AISearch を無効にする
次のサンプルコードは、バケットに対して AISearch を無効にする方法の例を示しています。
package main
// 必要なパッケージをインポートします。
import (
"context" // context パッケージ
"flag" // flag パッケージ
"log" // log パッケージ
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" // OSS Go SDK
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" // OSS 認証情報プロバイダー
)
var (
region string // リージョン
bucketName string // バケット名
)
func init() {
// コマンドラインパラメータを使用してリージョンを指定します。
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
// コマンドラインパラメータを使用してバケット名を指定します。
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
flag.Parse() // コマンドラインパラメータを解析します。
// バケット名が指定されているかどうかを確認します。バケット名が指定されていない場合は、デフォルトのパラメータを返し、プログラムを終了します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。") // エラーを記録し、プログラムを終了します。
}
// リージョンが指定されているかどうかを確認します。リージョンが指定されていない場合は、デフォルトのパラメータを返し、プログラムを終了します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// クライアントを作成および構成し、環境変数を使用して認証プロバイダーとリージョンを渡します。
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("メタクエリの終了に失敗しました %v", err)
}
log.Printf("メタクエリの終了結果: %#v\n", result)
}