すべてのプロダクト
Search
ドキュメントセンター

:ファイルメタデータのクエリ

最終更新日:Dec 27, 2024

メタデータインデックスを作成した後、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()