OSS ベクトル検索は、セマンティックコンテンツ、OSS メタデータ、マルチメディアメタデータ、オブジェクト ETag、タグ、カスタムメタデータをクエリすることで、大規模なデータセット内の特定のオブジェクトを迅速に見つけるのに役立ちます。このトピックでは、Go SDK v2 を使用してベクトル検索を実行する方法について説明します。
注意事項
このトピックのサンプルコードは、中国 (杭州) リージョン (リージョン ID:
cn-hangzhou) を対象としており、デフォルトでパブリックエンドポイントを使用します。同じリージョン内の別の Alibaba Cloud プロダクトから 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
)
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("無効なパラメーター、バケット名が必要です")
}
// リージョンが指定されているか確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// クライアント構成を作成し、環境変数から認証情報を使用します。
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"), // セマンティック検索機能を有効にするために、モードを "semantic" に設定します。
}
result, err := client.OpenMetaQuery(context.TODO(), request)
if err != nil {
log.Fatalf("メタデータクエリのオープンに失敗しました %v", err)
}
log.Printf("メタデータクエリのオープン結果:%#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
)
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("無効なパラメーター、バケット名が必要です")
}
// リージョンが指定されているか確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// クライアント構成を作成し、環境変数から認証情報と指定したリージョンを使用します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // OSS クライアントを作成します。
// メタデータインデックスライブラリのステータスを取得するリクエストを作成します。
request := &oss.GetMetaQueryStatusRequest{
Bucket: oss.Ptr(bucketName), // クエリするバケットを指定します。
}
result, err := client.GetMetaQueryStatus(context.TODO(), request)
if err != nil {
log.Fatalf("メタデータクエリステータスの取得に失敗しました %v", err)
}
log.Printf("メタデータクエリステータスの取得結果:%#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
)
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("無効なパラメーター、バケット名が必要です")
}
// リージョンが指定されているか確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// クライアント構成を作成し、環境変数から認証情報と指定したリージョンを使用します。
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("メタデータクエリの実行に失敗しました %v", err)
}
log.Printf("メタデータクエリの実行結果:%#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
)
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("無効なパラメーター、バケット名が必要です")
}
// リージョンが指定されているか確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
// クライアント構成を作成し、環境変数から認証情報と指定したリージョンを使用します。
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("メタデータクエリのクローズに失敗しました %v", err)
}
log.Printf("メタデータクエリのクローズ結果:%#v\n", result)
}