建立中繼資料索引後,您可以調用相關介面查詢單個或多個指定檔案的中繼資料資訊,也可以通過欄位搜尋、關鍵字模糊搜尋、自然語言關鍵字搜尋的方式進行查詢。本文介紹如何查詢檔案資訊。
前提條件
已根據使用情境為檔案建立中繼資料索引。具體操作,請參見建立中繼資料索引。
查詢方式
支援對檔案資訊進行查詢和搜尋的方式如下表所示。
查詢方式 | 說明 |
查詢單個指定檔案資訊 | 調用GetFileMeta - 擷取檔案中繼資料介面可以查詢單個指定檔案的資訊。 |
查詢多個指定檔案資訊 | 調用BatchGetFileMeta - 批量擷取檔案中繼資料介面可以查詢多個指定檔案的資訊。 |
簡單查詢 | 調用SimpleQuery - 簡單查詢介面可以查詢滿足指定條件的檔案,並按照指定欄位和排序方式列出檔案資訊。 調用SimpleQuery介面時,您也可以通過Query的嵌套使用實現複雜查詢,以及通過彙總操作實現對不同欄位的值進行統計和分析。支援的欄位和操作符請參見欄位和操作符的支援列表。 |
模糊查詢 | 調用FuzzyQuery - 模糊查詢介面可以查詢匹配指定字串的所有檔案,並列出檔案資訊。 調用FuzzyQuery介面時,Intelligent Media Management服務會從所有已提取的檔案中繼資料中查詢指定字串,例如從檔案名稱、標籤、路徑、自訂標籤、文本等欄位中查詢。只要檔案中繼資料中有一個欄位的值匹配指定字串,該檔案的資訊就會被返回。 |
自然語言關鍵字查詢 | 調用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": "人物" }, "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訪問的身分識別驗證。如何配置環境變數,請參見https://help.aliyun.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()
查詢多個指定檔案資訊
如下以查詢專案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\"]" }
返回樣本格式與查詢單個指定檔案資訊相同。
完整範例程式碼(以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訪問的身分識別驗證。如何配置環境變數,請參見https://help.aliyun.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訪問的身分識別驗證。如何配置環境變數,請參見https://help.aliyun.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" } ] }
模糊查詢
如下以查詢專案test-project下,test-dataset資料集中匹配字串為jpg的檔案為例。
請求樣本
{ "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訪問的身分識別驗證。如何配置環境變數,請參見https://help.aliyun.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()
自然語言關鍵字查詢
如下以查詢專案test-project下,test-dataset資料集中包含2020年7月成都的熊貓的檔案為例。
請求樣本
{ "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訪問的身分識別驗證。如何配置環境變數,請參見https://help.aliyun.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()