メタデータインデックスを作成した後、Intelligent Media Management (IMM) の API オペレーションを呼び出すことで、1 つ以上のファイルのメタデータをクエリできます。フィールド検索、あいまいキーワード検索、または自然言語キーワード検索を使用してメタデータをクエリすることもできます。このトピックでは、ファイルメタデータをクエリする方法について説明します。
前提条件
ユースケースに基づいて、ファイルのメタデータインデックスが作成されます。詳細については、メタデータインデックスの作成を参照してください。
クエリメソッド
次の表は、ファイルメタデータのクエリに使用できるメソッドを示しています。
メソッド | 説明 |
単一ファイルのメタデータをクエリする | GetFileMeta オペレーションを呼び出して、単一ファイルのメタデータをクエリします。 |
複数ファイルのメタデータをクエリする | BatchGetFileMeta オペレーションを呼び出して、複数ファイルのメタデータを一度にクエリします。 |
単純クエリを実行する | SimpleQuery オペレーションを呼び出して、指定された条件を満たすファイルをクエリし、特定の並べ替え順序でフィールド別にメタデータを一覧表示します。 ネストを使用して複雑なクエリを実行したり、集計操作を実行してさまざまなフィールドの値の統計を収集して分析したりすることもできます。サポートされているフィールドと演算子のリストについては、サポートされているフィールドと演算子を参照してください。 |
あいまい検索を実行する | FuzzyQuery オペレーションを呼び出して、指定された文字列に一致するファイルをクエリし、ファイルメタデータを一覧表示します。 IMM は、ファイル名、ラベル、パス、カスタムラベルなど、抽出されたメタデータフィールド内で指定された文字列を検索します。ファイルのメタデータフィールド値の 1 つが指定された文字列と一致する場合、ファイルのすべてのメタデータが返されます。 |
自然言語キーワード検索を実行する | SemanticQuery オペレーションを呼び出して、自然言語キーワードに基づいてデータセット内のメタデータをクエリします。 このオペレーションは、ラベル、作成日時、および住所フィールドに基づくセマンティック検索をサポートしています。たとえば、「杭州の空」に意味的に関連するファイルのメタデータをクエリするには、クエリ条件として「Query=杭州の空」を指定します。 |
単一ファイルのメタデータをクエリする
Test-project プロジェクトの Test-dataset データセットで、oss://test-bucket/test-object.jpg オブジェクトのメタデータを検索する例を次に示します。
サンプルリクエスト
{ "ProjectName": "test-project", "URI": "oss://test-bucket/test-object.jpg", "DatasetName": "test-dataset" }
サンプルレスポンス
{ "RequestId": "645FB6D9-5EA0-02C9-B253-****", "Files": [ { "ProduceTime": "2020-08-19T17:11:11+08:00", "ObjectACL": "default", "ContentType": "image/jpeg", "ProjectName": "test-project", "Size": 22868, "URI": "oss://test-bucket/test-object.jpg", "Addresses": [ { "Language": "zh-Hans", "Township": "Tanggou Town", "AddressLine": "Chenlongzhuang, Tanggou Town, Shuyang County, Suqian City, Jiangsu Province", "Country": "China", "City": "Suqian", "District": "Shuyang", "Province": "Jiangsu" } ], "ObjectType": "file", "CustomLabels": { "category": "Persons" }, "OwnerId": "****", "FileModifiedTime": "2021-05-13T10:22:44+08:00", "ImageWidth": 270, "OSSStorageClass": "Standard", "MediaType": "image", "ObjectId": "****", "CreateTime": "2022-07-06T07:10:18.497753661+08:00", "Filename": "1.jpg", "Labels": [ { "CentricScore": 0.921999990940094, "Language": "zh-Hans", "LabelConfidence": 1, "LabelName": "Hairstyle", "LabelLevel": 2, "ParentLabelName": "Daily behavior" }, ... ], "Orientation": 1, "Figures": [ { "Beard": "none", "MaskConfidence": 0.6959999799728394, "Gender": "female", "Boundary": { "Left": 70, "Top": 75, "Height": 134, "Width": 101 }, ... } ], "EXIF": "...", "ContentMd5": "HZwoCnxPZ/fvhz4oRJ****", "ImageHeight": 270, "ImageScore": { "OverallQualityScore": 0.6140000224113464 }, "ETag": "\"1D9C280A7C4F67F7EF873E28449D****\"", "DatasetName": "test-dataset", "FileHash": "\"1D9C280A7C4F67F7EF873E2****\"", "UpdateTime": "2022-07-06T07:10:18.497753661+08:00", "OSSCRC64": "5634447745650079669", "OSSTaggingCount": 0, "LatLong": "34.000000,119.000000", "OSSObjectType": "Normal" } ] }
完全なサンプルコード (IMM SDK for Python V1.27.3)
# -*- coding: utf-8 -*- import os from alibabacloud_imm20200930.client import Client as imm20200930Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_imm20200930 import models as imm_20200930_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client( access_key_id: str, access_key_secret: str, ) -> imm20200930Client: """ AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。 @param access_key_id: @param access_key_id: @param access_key_secret: @return: Client @throws Exception """ config = open_api_models.Config( access_key_id=access_key_id, access_key_secret=access_key_secret ) # エンドポイントを指定します。 config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Alibaba Cloud アカウントの AccessKey ペアは、すべての API オペレーションに対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API オペレーションを呼び出したり、日常の O&M を実行することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスの ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の構成方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 imm_access_key_id = os.getenv("AccessKeyId") imm_access_key_secret = os.getenv("AccessKeySecret") client = Sample.create_client(imm_access_key_id, imm_access_key_secret) get_file_meta_request = imm_20200930_models.GetFileMetaRequest( project_name='test-project', dataset_name='test-dataset', uri='oss://test-bucket/test-object.jpg' ) runtime = util_models.RuntimeOptions() try: # API オペレーションのレスポンスを出力します。 response = client.get_file_meta_with_options(get_file_meta_request, runtime) print(response.body.to_map()) except Exception as error: # 必要に応じてエラーメッセージを出力します。 UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
複数ファイルのメタデータをクエリする
Test-project プロジェクトの Test-dataset データセットで、oss://test-bucket/test-object1.jpg オブジェクトと oss://test-bucket/test-object2.jpg オブジェクトのメタデータを検索する例を次に示します。
サンプルリクエスト
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "URIs": "[\"oss://test-bucket/test-object.jpg\", \"oss://test-bucket/test-object2.jpg\"]" }
サンプルレスポンス (単一ファイルのメタデータをクエリする セクションのサンプルレスポンスを参照)
完全なサンプルコード (IMM SDK for Python V1.27.3)
# -*- coding: utf-8 -*- import os from alibabacloud_imm20200930.client import Client as imm20200930Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_imm20200930 import models as imm_20200930_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client( access_key_id: str, access_key_secret: str, ) -> imm20200930Client: """ AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。 @param access_key_id: @param access_key_secret: @return: Client @throws Exception """ config = open_api_models.Config( access_key_id=access_key_id, access_key_secret=access_key_secret ) # エンドポイントを指定します。 config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Alibaba Cloud アカウントの AccessKey ペアは、すべての API オペレーションに対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API オペレーションを呼び出したり、日常の O&M を実行することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスの ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の構成方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 imm_access_key_id = os.getenv("AccessKeyId") imm_access_key_secret = os.getenv("AccessKeySecret") client = Sample.create_client(imm_access_key_id, imm_access_key_secret) batch_get_file_meta_request = imm_20200930_models.BatchGetFileMetaRequest( project_name='test-project', dataset_name='test-dataset', uris=[ 'oss://test-bucket/test-object1.jpg', 'oss://test-bucket/test-object2.jpg' ] ) runtime = util_models.RuntimeOptions() try: # API オペレーションのレスポンスを出力します。 response = client.batch_get_file_meta_with_options(batch_get_file_meta_request, runtime) print(response.body.to_map()) except Exception as error: # 必要に応じてエラーメッセージを出力します。 UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
単純クエリを実行する
例 1
クエリ条件は次のとおりです。
プロジェクト名: test-project
データセット名: test-dataset
ファイルタイプ: image
クエリ結果の並べ替え: ファイルサイズの昇順
返されるクエリ結果の最大数: 100
例を次に示します。
サンプルリクエスト
{ "Query": "{\"Field\": \"ContentType\", \"Operation\": \"prefix\", \"Value\": \"image\"}", "ProjectName": "test-project", "DatasetName": "test-dataset" "Sort": "Size", "Order": "asc", "MaxResults": 100 }
サンプルレスポンス (単一ファイルのメタデータをクエリする セクションのサンプルレスポンスを参照)
完全なサンプルコード (IMM SDK for Python V1.27.3)
# -*- coding: utf-8 -*- import os from alibabacloud_imm20200930.client import Client as imm20200930Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_imm20200930 import models as imm_20200930_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client( access_key_id: str, access_key_secret: str, ) -> imm20200930Client: """ AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。 @param access_key_id: @param access_key_secret: @return: Client @throws Exception """ config = open_api_models.Config( access_key_id=access_key_id, access_key_secret=access_key_secret ) config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Alibaba Cloud アカウントの AccessKey ペアは、すべての API オペレーションに対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API オペレーションを呼び出したり、日常の O&M を実行することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスの ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の構成方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 imm_access_key_id = os.getenv("AccessKeyId") imm_access_key_secret = os.getenv("AccessKeySecret") client = Sample.create_client(imm_access_key_id, imm_access_key_secret) request = imm_20200930_models.SimpleQueryRequest() params = { # クエリ条件を指定します "Query": {"SubQueries": [{"Field": "ContentType", "Operation": "eq", "Value": "image/jpeg"}, {"Field": "Size", "Operation": "gt", "Value": "10485760"}, {"Field": "CustomLabels.category", "Operation": "eq", "Value": "Persons"}], "Operation": "and"}, # IMM プロジェクトの名前を指定します。 "ProjectName": "test-project", # データセットの名前を指定します。 "DatasetName": "test-dataset", # 並べ替えフィールドを指定します。 "Sort": "Size", # 並べ替え順序を指定します。 "Order": "asc", # クエリ結果の最大数を 100 に設定します。 "MaxResults": 100 } request.from_map(params) runtime = util_models.RuntimeOptions() try: # API オペレーションのレスポンスを出力します。 response = client.simple_query_with_options(request, runtime) print(response.body.to_map()) except Exception as error: # 必要に応じてエラーメッセージを出力します。 UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
例 2
クエリ条件は次のとおりです。
プロジェクト名: test-project
データセット名: test-dataset
ファイルタイプ: image
ファイルサイズ: 10 MB より大きい
カスタムラベル (CustomLabels.category): Persons
クエリ結果の並べ替え: ファイルサイズの昇順
返されるクエリ結果の最大数: 100
例を次に示します。
サンプルリクエスト
{ "Query": "{\"SubQueries\": [{\"Field\": \"ContentType\", \"Operation\": \"prefix\", \"Value\": \"image\"}, {\"Field\": \"Size\", \"Operation\": \"gt\", \"Value\": \"10485760\"}, {\"Field\": \"CustomLabels.category\", \"Operation\": \"eq\", \"Value\": \"Persons\"}], \"Operation\": \"and\"}", "ProjectName": "test-project", "DatasetName": "test-dataset", "Sort": "Size", "Order": "asc", "MaxResults": 100
サンプルレスポンス (単一ファイルのメタデータをクエリする セクションのサンプルレスポンスを参照)
例 3
クエリ条件は次のとおりです。
プロジェクト名: test-project
データセット名: test-dataset
ファイルパス: oss://test-bucket/
ファイルサイズ: 10 MB より大きい
ラベル (Labels.LabelName): 「TV」または「ステレオ」
クエリ結果の並べ替え: ファイルサイズの昇順
返されるクエリ結果の最大数: 100
例を次に示します。
サンプルリクエスト
{ "Query": "{\"SubQueries\":[{\"Field\":\"URI\",\"Value\":\"oss://test-bucket/\",\"Operation\":\"prefix\"},{\"Field\":\"Size\",\"Value\":\"10485760\",\"Operation\":\"gt\"},{\"SubQueries\":[{\"Field\":\"Labels.LabelName\",\"Value\":\"TV\",\"Operation\":\"eq\"},{\"Field\":\"Labels.LabelName\",\"Value\":\"Stereo\",\"Operation\":\"eq\"}],\"Operation\":\"or\"}],\"Operation\":\"and\"}", "ProjectName": "test-project", "DatasetName": "test-dataset", "Sort": "Size", "Order": "asc", "MaxResults": 100 }
サンプルレスポンス (単一ファイルのメタデータをクエリする セクションのサンプルレスポンスを参照)
例 4
クエリ条件は次のとおりです。
プロジェクト名: test-project
データセット名: test-dataset
ファイルタイプ: image
ファイルサイズ: 10 MB より大きい
カスタムラベル (CustomLabels.category): Persons
返される結果: 一致するファイルの合計サイズ
例を次に示します。
サンプルリクエスト
{ "Query": "{\"SubQueries\": [{\"Field\": \"ContentType\", \"Operation\": \"eq\", \"Value\": \"image/jpeg\"}, {\"Field\": \"Size\", \"Operation\": \"gt\", \"Value\": \"10485760\"}, {\"Field\": \"CustomLabels.category\", \"Operation\": \"eq\", \"Value\": \"Persons\"}], \"Operation\": \"and\"}", "ProjectName": "test-project", "DatasetName": "test-dataset", "Aggregations": "[{\"Field\":\"Size\",\"Operation\":\"sum\"}]" }
サンプルレスポンス
{ "RequestId": "0FB9BA35-E16B-0DFE-BD52-****", "Aggregations": [ { "Field": "Size", "Value": 10485760, "Operation": "sum" } ] }
例 5
クエリ条件は次のとおりです。
プロジェクト名: test-project
データセット名: test-dataset
ファイルサイズ: 10 MB より大きい
顔 (Figures.Age と Figures.Gender): 年齢と性別
クエリ結果の並べ替え: ファイルサイズの昇順
返されるクエリ結果の最大数: 100
例を次に示します。
サンプルリクエスト
{ "Query": "{\"Operation\":\"not\",\"SubQueries\":[{\"Operation\":\"nested\",\"SubQueries\":[{\"Operation\":\"and\",\"SubQueries\":[{\"Field\":\"Figures.Age\",\"Operation\":\"gt\",\"Value\":\"36\"},{\"Field\":\"Figures.Gender\",\"Operation\":\"eq\",\"Value\":\"male\"},{\"Field\":\"Size\",\"Operation\":\"gt\",\"Value\":\"10485760\"}]}]}]}", "ProjectName": "test-project", "DatasetName": "test-dataset", "Sort": "Size", "Order": "asc", "MaxResults": 100 }
サンプルレスポンス (単一ファイルのメタデータをクエリする セクションのサンプルレスポンスを参照)
例 6
クエリ条件は次のとおりです。
プロジェクト名: test-project
データセット名: test-dataset
ファイルタイプ: image
ファイルサイズ: 10 MB より大きい
カスタムラベル (CustomLabels.category): 存在
返される結果: 一致するファイルの合計サイズ
例を次に示します。
サンプルリクエスト
{ "Query": "{\"SubQueries\": [{\"Field\": \"ContentType\", \"Operation\": \"eq\", \"Value\": \"image/jpeg\"}, {\"Field\": \"Size\", \"Operation\": \"gt\", \"Value\": \"10485760\"}, {\"Field\": \"CustomLabels.category\", \"Operation\": \"exist\"}], \"Operation\": \"and\"}", "ProjectName": "test-project", "DatasetName": "test-dataset", "Aggregations": "[{\"Field\":\"Size\",\"Operation\":\"sum\"}]" }
サンプルレスポンス
{ "RequestId": "0FB9BA35-E16B-0DFE-BD52-****", "Aggregations": [ { "Field": "Size", "Value": 10485760, "Operation": "sum" } ] }
あいまい検索を実行する
Test-project プロジェクトの Test-dataset データセットで、jpg 文字列に一致するファイルのメタデータを検索する例を次に示します。
サンプルリクエスト
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "Query": "jpg" }
サンプルレスポンス (単一ファイルのメタデータをクエリする セクションのサンプルレスポンスを参照)
完全なサンプルコード (IMM SDK for Python V1.27.3)
# -*- coding: utf-8 -*- import os from alibabacloud_imm20200930.client import Client as imm20200930Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_imm20200930 import models as imm_20200930_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client( access_key_id: str, access_key_secret: str, ) -> imm20200930Client: """ AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。 @param access_key_id: @param access_key_secret: @return: Client @throws Exception """ config = open_api_models.Config( access_key_id=access_key_id, access_key_secret=access_key_secret ) config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Alibaba Cloud アカウントの AccessKey ペアは、すべての API オペレーションに対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API オペレーションを呼び出したり、日常の O&M を実行することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスの ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の構成方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 imm_access_key_id = os.getenv("AccessKeyId") imm_access_key_secret = os.getenv("AccessKeySecret") client = Sample.create_client(imm_access_key_id, imm_access_key_secret) fuzzy_query_request = imm_20200930_models.FuzzyQueryRequest( # IMM プロジェクトの名前を指定します。 project_name='test-project', # データセットの名前を指定します。 dataset_name='test-dataset', # キーワードを指定します。 query='jpg' ) runtime = util_models.RuntimeOptions() try: # API オペレーションのレスポンスを出力します。 response = client.fuzzy_query_with_options(fuzzy_query_request, runtime) print(response.body.to_map()) except Exception as error: # 必要に応じてエラーメッセージを出力します。 UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()
自然言語キーワード検索を実行する
次の例では、test-dataset データセット (プロジェクト: test-project) 内で、2020 年 7 月に成都で撮影されたパンダの写真を検索します。
サンプルリクエスト
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "Query": "Pandas in Chengdu in July 2020" "MaxResults": 100 }
サンプルレスポンス (単一ファイルのメタデータをクエリする セクションのサンプルレスポンスを参照)
完全なサンプルコード (IMM SDK for Python V1.27.3)
# -*- coding: utf-8 -*- import os from alibabacloud_imm20200930.client import Client as imm20200930Client from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_imm20200930 import models as imm_20200930_models from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util.client import Client as UtilClient class Sample: def __init__(self): pass @staticmethod def create_client( access_key_id: str, access_key_secret: str, ) -> imm20200930Client: """ AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。 @param access_key_id: @param access_key_secret: @return: Client @throws Exception """ config = open_api_models.Config( access_key_id=access_key_id, access_key_secret=access_key_secret ) config.endpoint = f'imm.cn-beijing.aliyuncs.com' return imm20200930Client(config) @staticmethod def main() -> None: # Alibaba Cloud アカウントの AccessKey ペアは、すべての API オペレーションに対する権限を持っています。これらの資格情報を使用して操作を実行することは、リスクの高い操作です。RAM ユーザーを使用して API オペレーションを呼び出したり、日常の O&M を実行することをお勧めします。 # セキュリティ上の理由から、AccessKey ペアをプロジェクトコードに埋め込まないことをお勧めします。 # この例では、API アクセスの ID 検証を実装するために、環境変数から AccessKey ペアを取得しています。環境変数の構成方法については、https://www.alibabacloud.com/help/ja/imm/developer-reference/configure-environment-variables を参照してください。 imm_access_key_id = os.getenv("AccessKeyId") imm_access_key_secret = os.getenv("AccessKeySecret") client = Sample.create_client(imm_access_key_id, imm_access_key_secret) semantic_query_request = imm_20200930_models.SemanticQueryRequest( query='Pandas in Chengdu in July 2020', project_name='test-project', dataset_name='test-dataset', max_results=100 ) runtime = util_models.RuntimeOptions() try: # API オペレーションのレスポンスを出力します。 response = client.semantic_query_with_options(semantic_query_request, runtime) print(response.body.to_map()) except Exception as error: # 必要に応じてエラーメッセージを出力します。 UtilClient.assert_as_string(error.message) print(error) if __name__ == '__main__': Sample.main()