スカラー検索は、メタデータに基づいてオブジェクトをクエリできる OSS の機能です。カスタム条件を使用して、オブジェクトのリストをすばやくフィルター処理して取得できます。このトピックでは、Go SDK V2 を使用してスカラー検索を実行する方法について説明します。
注意事項
このトピックのサンプルコードでは、リージョン ID として中国 (杭州) の
cn-hangzhouを例として使用しています。デフォルトではパブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS がサポートするリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックのサンプルコードは、環境変数からアクセス資格情報を読み取ります。アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
サンプルコード
メタデータ管理機能の有効化
次のコードは、指定されたバケットのメタデータ管理機能を有効にする方法を示しています。この機能を有効にすると、OSS はバケットのメタデータインデックスライブラリを作成し、バケット内のすべてのオブジェクトのメタデータインデックスを作成します。メタデータインデックスライブラリが作成されると、OSS はバケット内の新しいファイルのほぼリアルタイムの増分スキャンを実行し、これらのファイルのメタデータインデックスを作成します。
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", "", "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 クライアントインスタンスを作成します。
// 特定のバケットのメタデータ管理機能を有効にするための OpenMetaQuery リクエストを作成します。
request := &oss.OpenMetaQueryRequest{
Bucket: oss.Ptr(bucketName), // 操作対象のバケットの名前を指定します。
}
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) // メタデータ管理を有効にした結果を出力します。
}メタデータインデックスライブラリに関する情報の取得
次のコードは、指定されたバケットのメタデータインデックスライブラリに関する情報を取得する方法を示しています。
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", "", "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 クライアントインスタンスを作成します。
// 特定のバケットのメタデータインデックスライブラリに関する情報を取得するための GetMetaQueryStatus リクエストを作成します。
request := &oss.GetMetaQueryStatusRequest{
Bucket: oss.Ptr(bucketName), // クエリ対象のバケットの名前を指定します。
}
result, err := client.GetMetaQueryStatus(context.TODO(), request) // リクエストを実行して、バケットのメタデータインデックスライブラリに関する情報を取得します。
if err != nil {
log.Fatalf("failed to get meta query status %v", err) // エラーが発生した場合、エラーメッセージをログに記録し、プログラムを終了します。
}
log.Printf("get meta query status result:%#v\n", result)
}特定の条件を満たすオブジェクトをクエリする
次のコードは、スカラー検索機能を使用して特定の条件を満たすオブジェクトをクエリし、指定されたフィールドとソート方法に基づいてオブジェクトに関する情報を一覧表示する方法を示しています。
package main
import (
"context"
"flag"
"fmt"
"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", "", "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 クライアントインスタンスを作成します。
// 特定の条件を満たすオブジェクトをクエリするための DoMetaQuery リクエストを作成します。
request := &oss.DoMetaQueryRequest{
Bucket: oss.Ptr(bucketName), // クエリ対象のバケットの名前を指定します。
MetaQuery: &oss.MetaQuery{
Query: oss.Ptr(`{"Field": "Size","Value": "1048576","Operation": "gt"}`), // クエリ条件: 1 MB より大きいオブジェクト。
Sort: oss.Ptr("Size"), // ソートフィールド: オブジェクトサイズでソートします。
Order: oss.Ptr(oss.MetaQueryOrderAsc), // ソート順: 昇順。
},
}
result, err := client.DoMetaQuery(context.TODO(), request) // リクエストを送信してメタデータクエリを実行します。
if err != nil {
log.Fatalf("failed to do meta query %v", err)
}
// 次のページからデータを取得するためのページ分割クエリに使用される NextToken を出力します。
fmt.Printf("NextToken:%s\n", *result.NextToken)
// 返された結果を走査し、各ファイルの詳細を出力します。
for _, file := range result.Files {
fmt.Printf("File name: %s\n", *file.Filename)
fmt.Printf("size: %d\n", file.Size)
fmt.Printf("File Modified Time:%s\n", *file.FileModifiedTime)
fmt.Printf("Oss Object Type:%s\n", *file.OSSObjectType)
fmt.Printf("Oss Storage Class:%s\n", *file.OSSStorageClass)
fmt.Printf("Object ACL:%s\n", *file.ObjectACL)
fmt.Printf("ETag:%s\n", *file.ETag)
fmt.Printf("Oss CRC64:%s\n", *file.OSSCRC64)
if file.OSSTaggingCount != nil {
fmt.Printf("Oss Tagging Count:%d\n", *file.OSSTaggingCount)
}
// オブジェクトのタグ情報を出力します。
for _, tagging := range file.OSSTagging {
fmt.Printf("Oss Tagging Key:%s\n", *tagging.Key)
fmt.Printf("Oss Tagging Value:%s\n", *tagging.Value)
}
// ユーザー定義のメタデータを出力します。
for _, userMeta := range file.OSSUserMeta {
fmt.Printf("Oss User Meta Key:%s\n", *userMeta.Key)
fmt.Printf("Oss User Meta Key Value:%s\n", *userMeta.Value)
}
}
}
メタデータ管理機能を無効にする
次のコードは、指定されたバケットのメタデータ管理機能を無効にする方法を示しています。
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", "", "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 クライアントインスタンスを作成します。
// 特定のバケットのメタデータ管理機能を無効にするための 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)
}関連ドキュメント
スカラー検索の詳細については、「スカラー検索」をご参照ください。
データインデックス作成に関連する API 操作の詳細については、「データインデックス作成」をご参照ください。
スカラー検索の完全なサンプルコードについては、「GitHub の例」をご参照ください。