建立元數據索引后,您可以調用相關接口查詢單個或多個指定文件的元數據信息,也可以通過字段搜索、關鍵字模糊搜索、自然語言關鍵字搜索的方式進行查詢。本文介紹如何查詢文件信息。
前提條件
已根據使用場景為文件建立元數據索引。具體操作,請參見建立元數據索引。
查詢方式
支持對文件信息進行查詢和搜索的方式如下表所示。
查詢方式 | 說明 |
查詢單個指定文件信息 | 調用GetFileMeta - 獲取文件元數據接口可以查詢單個指定文件的信息。 |
查詢多個指定文件信息 | 調用BatchGetFileMeta - 批量獲取文件元數據接口可以查詢多個指定文件的信息。 |
簡單查詢 | 調用SimpleQuery - 簡單查詢接口可以查詢滿足指定條件的文件,并按照指定字段和排序方式列出文件信息。 調用SimpleQuery接口時,您也可以通過Query的嵌套使用實現復雜查詢,以及通過聚合操作實現對不同字段的值進行統計和分析。支持的字段和操作符請參見字段和操作符的支持列表。 |
模糊查詢 | 調用FuzzyQuery - 模糊查詢接口可以查詢匹配指定字符串的所有文件,并列出文件信息。 調用FuzzyQuery接口時,智能媒體管理服務會從所有已提取的文件元數據中查詢指定字符串,例如從文件名、標簽、路徑、自定義標簽、文本等字段中查詢。只要文件元數據中有一個字段的值匹配指定字符串,該文件的信息就會被返回。 |
自然語言關鍵字查詢 | 調用SemanticQuery - 通過輸入自然語言關鍵字,對數據集內的元數據進行查詢與統計分析接口可以通過輸入自然語言關鍵字,對數據集內的元數據進行查詢。 該接口目前支持的查詢字段包括Labels,ProduceTime和AddressLine。例如,需要查詢包含杭州的天空的文件,您需要設置查詢條件為Query=杭州的天空。 |
查詢單個指定文件信息
請求示例
{ "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": "人物" }, "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": "發型", "LabelLevel": 2, "ParentLabelName": "日常行為" }, ... ], "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" } ] }
完整示例代碼(以1.27.3版本的Python SDK為例)
# -*- 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初始化賬號Client。 @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: # 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 # 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 # 本示例通過從環境變量中讀取AccessKey,來實現API訪問的身份驗證。如何配置環境變量,請參見http://m.bestwisewords.com/document_detail/2361894.html。 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()
查詢多個指定文件信息
請求示例
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "URIs": "[\"oss://test-bucket/test-object.jpg\", \"oss://test-bucket/test-object2.jpg\"]" }
返回示例格式與查詢單個指定文件信息相同。
完整示例代碼(以1.27.3版本的Python SDK為例)
# -*- 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初始化賬號Client。 @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: # 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 # 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 # 本示例通過從環境變量中讀取AccessKey,來實現API訪問的身份驗證。如何配置環境變量,請參見http://m.bestwisewords.com/document_detail/2361894.html。 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()
簡單查詢
示例一
查詢條件如下。
項目名稱:test-project
數據集名稱:test-dataset
查詢文件類型:圖片
查詢結果排序方式:按照文件大小升序排列
查詢結果最大返回數量:最多返回100條
請求示例
{ "Query": "{\"Field\": \"ContentType\", \"Operation\": \"prefix\", \"Value\": \"image\"}", "ProjectName": "test-project", "DatasetName": "test-dataset" "Sort": "Size", "Order": "asc", "MaxResults": 100 }
返回示例格式與查詢單個指定文件信息相同。
完整示例代碼(以1.27.3版本的Python SDK為例)
# -*- 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初始化賬號Client。 @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: # 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 # 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 # 本示例通過從環境變量中讀取AccessKey,來實現API訪問的身份驗證。如何配置環境變量,請參見http://m.bestwisewords.com/document_detail/2361894.html。 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": "人物"}], "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()
示例二
查詢條件如下。
項目名稱:test-project
數據集名稱:test-dataset
查詢文件類型:圖片
查詢文件大小:大于10 MB
自定義標簽(CustomLabels.category):人物
查詢結果排序方式:按照文件大小升序排列
查詢結果最大返回數量:最多返回100條
請求示例
{ "Query": "{\"SubQueries\": [{\"Field\": \"ContentType\", \"Operation\": \"prefix\", \"Value\": \"image\"}, {\"Field\": \"Size\", \"Operation\": \"gt\", \"Value\": \"10485760\"}, {\"Field\": \"CustomLabels.category\", \"Operation\": \"eq\", \"Value\": \"人物\"}], \"Operation\": \"and\"}", "ProjectName": "test-project", "DatasetName": "test-dataset", "Sort": "Size", "Order": "asc", "MaxResults": 100
返回示例格式與查詢單個指定文件信息相同。
示例三
查詢條件如下。
項目名稱:test-project
數據集名稱:test-dataset
查詢文件路徑:oss://test-bucket/
查詢文件大小:大于10 MB
標簽(Labels.LabelName):電視或音響
查詢結果排序方式:按照文件大小升序排列
查詢結果最大返回數量:最多返回100條
請求示例
{ "Query": "{\"SubQueries\":[{\"Field\":\"URI\",\"Value\":\"oss://test-bucket/\",\"Operation\":\"prefix\"},{\"Field\":\"Size\",\"Value\":\"10485760\",\"Operation\":\"gt\"},{\"SubQueries\":[{\"Field\":\"Labels.LabelName\",\"Value\":\"電視\",\"Operation\":\"eq\"},{\"Field\":\"Labels.LabelName\",\"Value\":\"音響\",\"Operation\":\"eq\"}],\"Operation\":\"or\"}],\"Operation\":\"and\"}", "ProjectName": "test-project", "DatasetName": "test-dataset", "Sort": "Size", "Order": "asc", "MaxResults": 100 }
返回示例格式與查詢單個指定文件信息相同。
示例四
查詢條件如下。
項目名稱:test-project
數據集名稱:test-dataset
查詢文件類型:圖片
查詢文件大小:大于10 MB
自定義標簽(CustomLabels.category):人物
查詢結果返回方式:統計總的文件大小
請求示例
{ "Query": "{\"SubQueries\": [{\"Field\": \"ContentType\", \"Operation\": \"eq\", \"Value\": \"image/jpeg\"}, {\"Field\": \"Size\", \"Operation\": \"gt\", \"Value\": \"10485760\"}, {\"Field\": \"CustomLabels.category\", \"Operation\": \"eq\", \"Value\": \"人物\"}], \"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
查詢文件大小:大于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 }
返回示例格式與查詢單個指定文件信息相同。
示例六
查詢條件如下。
項目名稱:test-project
數據集名稱:test-dataset
查詢文件類型:圖片
查詢文件大小:大于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" } ] }
模糊查詢
請求示例
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "Query": "jpg" }
返回示例格式與查詢單個指定文件信息相同。
完整示例代碼(以1.27.3版本的Python SDK為例)
# -*- 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初始化賬號Client。 @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: # 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 # 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 # 本示例通過從環境變量中讀取AccessKey,來實現API訪問的身份驗證。如何配置環境變量,請參見http://m.bestwisewords.com/document_detail/2361894.html。 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()
自然語言關鍵字查詢
請求示例
{ "ProjectName": "test-project", "DatasetName": "test-dataset", "Query": "2020年7月成都的熊貓", "MaxResults": 100 }
返回示例格式與查詢單個指定文件信息相同。
完整示例代碼(以1.27.3版本的Python SDK為例)
# -*- 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初始化賬號Client。 @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: # 阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維。 # 強烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。 # 本示例通過從環境變量中讀取AccessKey,來實現API訪問的身份驗證。如何配置環境變量,請參見http://m.bestwisewords.com/document_detail/2361894.html。 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()