メタデータインデックスを作成した後、Intelligent Media Management (IMM) の API オペレーションを呼び出して、1 つまたは複数のファイルのメタデータをクエリできます。フィールド検索、あいまいキーワード検索、自然言語キーワード検索を使用してメタデータをクエリすることも可能です。本トピックでは、ファイルメタデータのクエリ方法について説明します。
前提条件
使用シナリオに基づいて、ファイル用のメタデータインデックスが作成されます。詳細については、「メタデータインデックスを作成する」をご参照ください。
クエリ方法
以下の表に、ファイルメタデータをクエリする際に使用できる方法を示します。
方法 | 説明 |
単一ファイルのメタデータをクエリ | GetFileMeta オペレーションを呼び出して、単一ファイルのメタデータをクエリします。 |
複数ファイルのメタデータをクエリ | BatchGetFileMeta オペレーションを呼び出して、複数のファイルのメタデータを一度に取得します。 |
シンプルクエリの実行 | SimpleQuery オペレーションを呼び出して、指定された条件を満たすファイルをクエリし、特定のソート順でフィールドごとにメタデータをリスト表示します。 ネストを使用して複雑なクエリを実行したり、集約操作を実行してさまざまなフィールドの値を集計・分析したりすることもできます。サポートされているフィールドおよび演算子の一覧については、「サポートされるフィールドと演算子」をご参照ください。 |
あいまい検索の実行 | FuzzyQuery オペレーションを呼び出して、指定された文字列に一致するファイルをクエリし、ファイルメタデータをリスト表示します。 IMM は、ファイル名、ラベル、パス、カスタムラベルなどの抽出済みメタデータフィールド内で指定された文字列を検索します。ファイルのいずれかのメタデータフィールド値が指定された文字列と一致する場合、そのファイルのすべてのメタデータが返されます。 |
自然言語キーワード検索の実行 | SemanticQuery オペレーションを呼び出して、自然言語キーワードに基づいてデータセット内のメタデータをクエリします。 このオペレーションは、Labels、ProduceTime、および AddressLine フィールドに基づくセマンティック検索をサポートしています。たとえば、「杭州の空」と意味的に関連するファイルのメタデータをクエリするには、クエリ条件として「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": "湯溝町", "AddressLine": "江蘇省宿遷市沭陽県湯溝町陳龍荘", "Country": "中国", "City": "宿遷", "District": "沭陽", "Province": "江蘇" } ], "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 Secret を使用してクライアントを初期化します。 @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 オペレーションに対する権限があります。これらの認証情報を使用して操作を実行するのは高リスク操作です。API オペレーションの呼び出しや日常的な運用管理 (O&M) には、RAM ユーザーを使用することを推奨します。 # セキュリティ上の理由から、プロジェクトコード内に AccessKey ペアを埋め込まないことを推奨します。 # この例では、環境変数から AccessKey ペアを取得して、API アクセスの本人確認を実装しています。環境変数の設定方法については、https://www.alibabacloud.com/help/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 Secret を使用してクライアントを初期化します。 @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 オペレーションに対する権限があります。これらの認証情報を使用して操作を実行するのは高リスク操作です。API オペレーションの呼び出しや日常的な運用管理 (O&M) には、RAM ユーザーを使用することを推奨します。 # セキュリティ上の理由から、プロジェクトコード内に AccessKey ペアを埋め込まないことを推奨します。 # この例では、環境変数から AccessKey ペアを取得して、API アクセスの本人確認を実装しています。環境変数の設定方法については、https://www.alibabacloud.com/help/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 Secret を使用してクライアントを初期化します。 @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 オペレーションに対する権限があります。これらの認証情報を使用して操作を実行するのは高リスク操作です。API オペレーションの呼び出しや日常的な運用管理 (O&M) には、RAM ユーザーを使用することを推奨します。 # セキュリティ上の理由から、プロジェクトコード内に AccessKey ペアを埋め込まないことを推奨します。 # この例では、環境変数から AccessKey ペアを取得して、API アクセスの本人確認を実装しています。環境変数の設定方法については、https://www.alibabacloud.com/help/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」または「Stereo」
クエリ結果のソート:ファイルサイズの昇順
返されるクエリ結果の最大数: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 Secret を使用してクライアントを初期化します。 @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 オペレーションに対する権限があります。これらの認証情報を使用して操作を実行するのは高リスク操作です。API オペレーションの呼び出しや日常的な運用管理 (O&M) には、RAM ユーザーを使用することを推奨します。 # セキュリティ上の理由から、プロジェクトコード内に AccessKey ペアを埋め込まないことを推奨します。 # この例では、環境変数から AccessKey ペアを取得して、API アクセスの本人確認を実装しています。環境変数の設定方法については、https://www.alibabacloud.com/help/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-project プロジェクトの test-dataset データセット内で、「2020 年 7 月の成都のパンダ」に関連するファイルを検索します。
リクエスト例
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "Query": "2020 年 7 月の成都のパンダ" "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 Secret を使用してクライアントを初期化します。 @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 オペレーションに対する権限があります。これらの認証情報を使用して操作を実行するのは高リスク操作です。API オペレーションの呼び出しや日常的な運用管理 (O&M) には、RAM ユーザーを使用することを推奨します。 # セキュリティ上の理由から、プロジェクトコード内に AccessKey ペアを埋め込まないことを推奨します。 # この例では、環境変数から AccessKey ペアを取得して、API アクセスの本人確認を実装しています。環境変数の設定方法については、https://www.alibabacloud.com/help/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='2020 年 7 月の成都のパンダ', 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()