OSS AISearch を使用すると、セマンティックコンテンツ、OSS メタデータ、マルチメディアメタデータ、オブジェクト ETag、タグ、カスタムメタデータなどの条件に基づいて、膨大な数のオブジェクトの中からオブジェクトファイルをすばやく見つけ、取得効率を向上させることができます。このトピックでは、Python SDK V2 を使用したベクター検索の方法について説明します。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョン (
cn-hangzhou) を例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS がサポートするリージョンとエンドポイントのマッピングの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックの例では、環境変数からアクセス認証情報を読み取る方法を示します。アクセス認証情報を設定する方法の詳細については、「アクセス認証情報の設定」をご参照ください。
サンプルコード
AISearch 機能を有効にする
次のコードは、指定されたバケットの AISearch 機能を有効にする方法を示しています。
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()
メタデータインデックス情報を取得する
次のコードは、指定されたバケットのメタデータインデックス情報を取得する方法を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数パーサーを作成し、必要な引数を追加します。
parser = argparse.ArgumentParser(description="get meta query status 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
# OSS サービスが配置されているリージョンを設定します。
cfg.region = args.region
# エンドポイントが指定されている場合は、カスタムエンドポイントを設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# OSS クライアントを作成します。
client = oss.Client(cfg)
# get_meta_query_status メソッドを呼び出して、指定されたバケットのメタデータインデックス情報を取得します。
result = client.get_meta_query_status(oss.GetMetaQueryStatusRequest(
bucket=args.bucket,
))
# 返された結果の関連情報を出力します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' create time: {result.meta_query_status.create_time},'
f' update time: {result.meta_query_status.update_time},'
f' state: {result.meta_query_status.state},'
f' phase: {result.meta_query_status.phase},'
)
# スクリプトが直接実行されるときに main 関数を呼び出します。
if __name__ == "__main__":
main()
指定された条件を満たすオブジェクトをクエリする
次のコードは、AISearch 機能を使用して、指定されたセマンティックコンテンツに一致するオブジェクトをクエリする方法を示しています。
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='雪に覆われた森の空撮',
order='desc',
media_types=oss.MetaQueryMediaTypes(
media_type=['image']
),
simple_query='{"Operation":"gt", "Field": "Size", "Value": "30"}',
),
))
# 取得結果を出力します。
print(vars(result))
if __name__ == "__main__":
main()
AISearch 機能を無効にする
次のコードは、指定されたバケットの AISearch 機能を無効にする方法を示しています。
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()
参考資料
AISearch の詳細については、「AISearch」をご参照ください。
データインデックス作成の API 操作の詳細については、「データインデックス作成」をご参照ください。
AISearch の完全なサンプルコードについては、「GitHub の例」をご参照ください。