標準搜索API - GenericSearch
本文介紹通過阿里云OpenAPI SDK調用通用搜索標準接口的方法以及參數說明
接口調用
請求結構體
參數 | 類型 | 是否可空 | 說明 | 約束 |
| String | 不可空 | 搜索問題 | 長度:>=2 and <=100 |
| String | 可空 | 多輪交互的sessionId | 長度:<=128 |
| String | 可空 | 查詢的時間范圍 | 支持可選值:
|
| String | 可空 | 行業搜索,指定后只返回行業站點的檢索結果,多個行業使用逗號分隔 | 支持可選值:
|
| int32 | 可空 | 頁碼,默認值:1; |
安裝SDK
Java SDK
前提條件
已安裝Java8或以上版本。
Maven依賴
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>iqs20241111</artifactId>
<version>1.1.2</version>
</dependency>
調用代碼
package com.aliyun.iqs.example;
import com.alibaba.fastjson.JSON;
import com.aliyun.iqs20241111.Client;
import com.aliyun.iqs20241111.models.GenericSearchRequest;
import com.aliyun.iqs20241111.models.GenericSearchResponse;
import com.aliyun.iqs20241111.models.GenericSearchResult;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
public class GenericSearchMain {
public static void main(String[] args) throws Exception {
Client client = initClient();
invoke(client,"杭州美食", "NoLimit");
}
private static Client initClient() throws Exception {
// TODO: 使用您的AK/SK進行替換(建議通過環境變量加載)
String accessKeyId = System.getenv("ACCESS_KEY");
String accessKeySecret = System.getenv("ACCESS_SECRET");
Config config = new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret);
config.setEndpoint("iqs.cn-zhangjiakou.aliyuncs.com");
return new Client(config);
}
private static void invoke(Client client, String query, String timeRange) {
GenericSearchRequest request = new GenericSearchRequest();
request.setQuery(query);
request.setTimeRange(timeRange);
try {
GenericSearchResponse response = client.genericSearch(request);
GenericSearchResult result = response.getBody();
System.out.println(JSON.toJSONString(result));
} catch (TeaException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
Python SDK
前提條件
您需要確保已安裝Python3.8或以上版本。
安裝SDK
pip3 install alibabacloud_iqs20241111==1.1.2
調用代碼
import os
from alibabacloud_iqs20241111 import models
from alibabacloud_iqs20241111.client import Client
from alibabacloud_tea_openapi import models as open_api_models
from Tea.exceptions import TeaException
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> Client:
config = open_api_models.Config(
# TODO: 使用您的AK/SK進行替換(建議通過環境變量加載)
access_key_id=os.environ.get('ACCESS_KEY'),
access_key_secret=os.environ.get('ACCESS_SECRET')
)
config.endpoint = f'iqs.cn-zhangjiakou.aliyuncs.com'
return Client(config)
@staticmethod
def main() -> None:
client = Sample.create_client()
run_instances_request = models.GenericSearchRequest(
query='杭州美食',
time_range="NoLimit"
)
try:
response = client.generic_search(run_instances_request)
print(f"api success, requestId:{response.body.request_id}, size :{len(response.body.page_items)}")
except TeaException as e:
code = e.code
request_id = e.data.get("requestId")
message = e.data.get("message")
print(f"api exception, requestId:{request_id}, code:{code}, message:{message}")
if __name__ == '__main__':
Sample.main()
Go SDK
前提條件
Go 環境版本必須不低于 1.10.x
安裝SDK
require (
github.com/alibabacloud-go/iqs-20241111 v1.1.2
github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.10
)
調用代碼
package main
import (
"fmt"
"log"
"os"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
iqs20241111 "github.com/alibabacloud-go/iqs-20241111/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
const endpointURL = "iqs.cn-zhangjiakou.aliyuncs.com"
func createClient() (*iqs20241111.Client, error) {
accessKeyID := os.Getenv("ACCESS_KEY")
accessKeySecret := os.Getenv("ACCESS_SECRET")
if accessKeyID == "" || accessKeySecret == "" {
return nil, fmt.Errorf("ACCESS_KEY or ACCESS_SECRET environment variable is not set")
}
config := &openapi.Config{
AccessKeyId: tea.String(accessKeyID),
AccessKeySecret: tea.String(accessKeySecret),
Endpoint: tea.String(endpointURL),
}
return iqs20241111.NewClient(config)
}
func runGenericSearch(client *iqs20241111.Client) error {
request := &iqs20241111.GenericSearchRequest{
Query: tea.String("杭州美食"),
TimeRange: tea.String("NoLimit"),
}
runtime := &util.RuntimeOptions{}
resp, err := client.GenericSearchWithOptions(request, nil, runtime)
if err != nil {
return fmt.Errorf("generic search failed: %w", err)
}
fmt.Printf("[%s] response: %s\n", *resp.Body.RequestId, resp.Body)
return nil
}
func main() {
client, err := createClient()
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
if err := runGenericSearch(client); err != nil {
log.Fatalf("Error running generic search: %v", err)
}
}
C++ SDK
前提條件
1.需要支持C++ 11環境:Windows: Visual Studio 2015或以上版本。Linux: GCC 4.9或以上版本
2.CMake 3.0以上版本
安裝
1.下載核心類庫代碼:git clone https://github.com/aliyun/aliyun-openapi-cpp-sdk.git
2.替換/aliyun-openapi-cpp-sdk/core/src/CommonClient.cc內容為以下代碼
/*
* Copyright 1999-2019 Alibaba Cloud All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <algorithm>
#include <alibabacloud/core/AlibabaCloud.h>
#include <alibabacloud/core/CommonClient.h>
#include <alibabacloud/core/SimpleCredentialsProvider.h>
#include <alibabacloud/core/location/LocationClient.h>
#include <ctime>
#include <iomanip>
#include <sstream>
#include <alibabacloud/core/Utils.h>
namespace AlibabaCloud {
namespace {
const std::string SERVICE_NAME = "Common";
}
CommonClient::CommonClient(const Credentials &credentials,
const ClientConfiguration &configuration)
: CoreClient(SERVICE_NAME, configuration),
credentialsProvider_(
std::make_shared<SimpleCredentialsProvider>(credentials)),
signer_(std::make_shared<HmacSha1Signer>()) {}
CommonClient::CommonClient(
const std::shared_ptr<CredentialsProvider> &credentialsProvider,
const ClientConfiguration &configuration)
: CoreClient(SERVICE_NAME, configuration),
credentialsProvider_(credentialsProvider),
signer_(std::make_shared<HmacSha1Signer>()) {}
CommonClient::CommonClient(const std::string &accessKeyId,
const std::string &accessKeySecret,
const ClientConfiguration &configuration)
: CoreClient(SERVICE_NAME, configuration),
credentialsProvider_(std::make_shared<SimpleCredentialsProvider>(
accessKeyId, accessKeySecret)),
signer_(std::make_shared<HmacSha1Signer>()) {}
CommonClient::~CommonClient() {}
CommonClient::JsonOutcome
CommonClient::makeRequest(const std::string &endpoint, const CommonRequest &msg,
HttpRequest::Method method) const {
auto outcome = AttemptRequest(endpoint, msg, method);
if (outcome.isSuccess())
return JsonOutcome(
std::string(outcome.result().body(), outcome.result().bodySize()));
else
return JsonOutcome(outcome.error());
}
CommonClient::CommonResponseOutcome
CommonClient::commonResponse(const CommonRequest &request) const {
auto outcome = makeRequest(request.domain(), request, request.httpMethod());
if (outcome.isSuccess())
return CommonResponseOutcome(CommonResponse(outcome.result()));
else
return CommonResponseOutcome(Error(outcome.error()));
}
void CommonClient::commonResponseAsync(
const CommonRequest &request, const CommonResponseAsyncHandler &handler,
const std::shared_ptr<const AsyncCallerContext> &context) const {
auto fn = [this, request, handler, context]() {
handler(this, request, commonResponse(request), context);
};
asyncExecute(new Runnable(fn));
}
CommonClient::CommonResponseOutcomeCallable
CommonClient::commonResponseCallable(const CommonRequest &request) const {
auto task = std::make_shared<std::packaged_task<CommonResponseOutcome()>>(
[this, request]() { return this->commonResponse(request); });
asyncExecute(new Runnable([task]() { (*task)(); }));
return task->get_future();
}
HttpRequest CommonClient::buildHttpRequest(const std::string &endpoint,
const ServiceRequest &msg,
HttpRequest::Method method) const {
return buildHttpRequest(endpoint, dynamic_cast<const CommonRequest &>(msg),
method);
}
HttpRequest CommonClient::buildHttpRequest(const std::string &endpoint,
const CommonRequest &msg,
HttpRequest::Method method) const {
if (msg.requestPattern() == CommonRequest::RpcPattern)
return buildRpcHttpRequest(endpoint, msg, method);
else
return buildRoaHttpRequest(endpoint, msg, method);
}
std::string url_encode(const std::string &value) {
std::ostringstream escaped;
escaped.fill('0');
escaped << std::hex;
for (char c : value) {
if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
escaped << c;
} else {
escaped << '%' << std::setw(2) << int((unsigned char) c);
}
}
return escaped.str();
}
HttpRequest
CommonClient::buildRoaHttpRequest(const std::string &endpoint,
const CommonRequest &msg,
HttpRequest::Method method) const {
const Credentials credentials = credentialsProvider_->getCredentials();
Url url;
if (msg.scheme().empty()) {
url.setScheme("https");
} else {
url.setScheme(msg.scheme());
}
url.setHost(endpoint);
url.setPath(msg.resourcePath());
auto params = msg.queryParameters();
std::map<std::string, std::string> queryParams;
for (const auto &p : params) {
if (!p.second.empty())
queryParams[p.first] = p.second;
}
if (!queryParams.empty()) {
std::stringstream queryString;
for (const auto &p : queryParams) {
if (p.second.empty())
queryString << "&" << p.first;
else
queryString << "&" << p.first << "=" << url_encode(p.second);
}
url.setQuery(queryString.str().substr(1));
}
HttpRequest request(url);
request.setMethod(method);
if (msg.connectTimeout() != kInvalidTimeout) {
request.setConnectTimeout(msg.connectTimeout());
} else {
request.setConnectTimeout(configuration().connectTimeout());
}
if (msg.readTimeout() != kInvalidTimeout) {
request.setReadTimeout(msg.readTimeout());
} else {
request.setReadTimeout(configuration().readTimeout());
}
if (msg.headerParameter("Accept").empty()) {
request.setHeader("Accept", "application/json");
} else {
request.setHeader("Accept", msg.headerParameter("Accept"));
}
std::stringstream ss;
ss << msg.contentSize();
request.setHeader("Content-Length", ss.str());
if (msg.headerParameter("Content-Type").empty()) {
request.setHeader("Content-Type", "application/octet-stream");
} else {
request.setHeader("Content-Type", msg.headerParameter("Content-Type"));
}
request.setHeader("Content-MD5",
ComputeContentMD5(msg.content(), msg.contentSize()));
request.setBody(msg.content(), msg.contentSize());
std::time_t t = std::time(nullptr);
std::stringstream date;
#if defined(__GNUG__) && __GNUC__ < 5
char tmbuff[26];
strftime(tmbuff, 26, "%a, %d %b %Y %T", std::gmtime(&t));
date << tmbuff << " GMT";
#else
date << std::put_time(std::gmtime(&t), "%a, %d %b %Y %T GMT");
#endif
request.setHeader("Date", date.str());
request.setHeader("Host", url.host());
request.setHeader("x-sdk-client",
std::string("CPP/").append(ALIBABACLOUD_VERSION_STR));
request.setHeader("x-acs-region-id", configuration().regionId());
if (!credentials.sessionToken().empty())
request.setHeader("x-acs-security-token", credentials.sessionToken());
request.setHeader("x-acs-signature-method", signer_->name());
request.setHeader("x-acs-signature-nonce", GenerateUuid());
request.setHeader("x-acs-signature-version", signer_->version());
request.setHeader("x-acs-version", msg.version());
std::stringstream plaintext;
plaintext << HttpMethodToString(method) << "\n"
<< request.header("Accept") << "\n"
<< request.header("Content-MD5") << "\n"
<< request.header("Content-Type") << "\n"
<< request.header("Date") << "\n"
<< canonicalizedHeaders(request.headers());
if (!queryParams.empty()) {
std::stringstream queryString;
for (const auto &p : queryParams) {
if (p.second.empty())
queryString << "&" << p.first;
else
queryString << "&" << p.first << "=" << p.second;
}
url.setQuery(queryString.str().substr(1));
}
if (!url.hasQuery())
plaintext << url.path();
else
plaintext << url.path() << "?" << url.query();
std::stringstream sign;
sign << "acs " << credentials.accessKeyId() << ":"
<< signer_->generate(plaintext.str(), credentials.accessKeySecret());
request.setHeader("Authorization", sign.str());
return request;
}
HttpRequest
CommonClient::buildRpcHttpRequest(const std::string &endpoint,
const CommonRequest &msg,
HttpRequest::Method method) const {
const Credentials credentials = credentialsProvider_->getCredentials();
Url url;
if (msg.scheme().empty()) {
url.setScheme("https");
} else {
url.setScheme(msg.scheme());
}
url.setHost(endpoint);
url.setPath(msg.resourcePath());
auto params = msg.queryParameters();
std::map<std::string, std::string> queryParams;
for (const auto &p : params) {
if (!p.second.empty())
queryParams[p.first] = p.second;
}
queryParams["AccessKeyId"] = credentials.accessKeyId();
queryParams["Format"] = "JSON";
queryParams["RegionId"] = configuration().regionId();
queryParams["SecurityToken"] = credentials.sessionToken();
queryParams["SignatureMethod"] = signer_->name();
queryParams["SignatureNonce"] = GenerateUuid();
queryParams["SignatureVersion"] = signer_->version();
std::time_t t = std::time(nullptr);
std::stringstream ss;
#if defined(__GNUG__) && __GNUC__ < 5
char tmbuff[26];
strftime(tmbuff, 26, "%FT%TZ", std::gmtime(&t));
ss << tmbuff;
#else
ss << std::put_time(std::gmtime(&t), "%FT%TZ");
#endif
queryParams["Timestamp"] = ss.str();
queryParams["Version"] = msg.version();
std::string bodyParamString;
auto signParams = queryParams;
auto bodyParams = msg.bodyParameters();
for (const auto &p : bodyParams) {
bodyParamString += "&";
bodyParamString += (p.first + "=" + UrlEncode(p.second));
signParams[p.first] = p.second;
}
std::stringstream plaintext;
plaintext << HttpMethodToString(method) << "&" << UrlEncode(url.path()) << "&"
<< UrlEncode(canonicalizedQuery(signParams));
queryParams["Signature"] =
signer_->generate(plaintext.str(), credentials.accessKeySecret() + "&");
std::stringstream queryString;
for (const auto &p : queryParams)
queryString << "&" << p.first << "=" << UrlEncode(p.second);
url.setQuery(queryString.str().substr(1));
HttpRequest request(url);
if (msg.connectTimeout() != kInvalidTimeout) {
request.setConnectTimeout(msg.connectTimeout());
} else {
request.setConnectTimeout(configuration().connectTimeout());
}
if (msg.readTimeout() != kInvalidTimeout) {
request.setReadTimeout(msg.readTimeout());
} else {
request.setReadTimeout(configuration().readTimeout());
}
request.setMethod(method);
request.setHeader("Host", url.host());
request.setHeader("x-sdk-client",
std::string("CPP/").append(ALIBABACLOUD_VERSION_STR));
if (!bodyParamString.empty()) {
request.setBody(bodyParamString.c_str() + 1, bodyParamString.size() - 1);
}
return request;
}
} // namespace AlibabaCloud
3.Linux安裝相關依賴:必須安裝依賴的外部庫文件 libcurl、libopenssl、libuuid、libjsoncpp。
對于 Redhat / Fedora 的系統上安裝這些軟件包
# use yum
yum install jsoncpp-devel openssl-devel libuuid-devel libcurl-devel
# use dnf
sudo dnf install libcurl-devel openssl-devel libuuid-devel libjsoncpp-devel
對于 Debian/Ubuntu 的系統
sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev libjsoncpp-dev
4.對核心依賴庫進行編譯:在SDK根目錄(aliyun-openapi-cpp-sdk)下執行sudo sh easyinstall.sh core
調用代碼
#include <cstdlib>
#include <iostream>
#include <string>
#include <alibabacloud/core/AlibabaCloud.h>
#include <alibabacloud/core/CommonRequest.h>
#include <alibabacloud/core/CommonClient.h>
#include <alibabacloud/core/CommonResponse.h>
using namespace std;
using namespace AlibabaCloud;
int main(int argc, char** argv)
{
AlibabaCloud::ClientConfiguration configuration("cn-zhangjiakou");
// specify timeout when create client.
configuration.setConnectTimeout(10000);
configuration.setReadTimeout(10000);
AlibabaCloud::Credentials credential("your ak", "your sk" );
AlibabaCloud::CommonClient client(credential, configuration);
AlibabaCloud::CommonRequest request(AlibabaCloud::CommonRequest::RequestPattern::RoaPattern);
request.setHttpMethod(AlibabaCloud::HttpRequest::Method::Get);
request.setDomain("iqs.cn-zhangjiakou.aliyuncs.com");
request.setVersion("2024-11-11");
request.setQueryParameter("query", "黑神話");
request.setQueryParameter("timeRange", "NoLimit");
request.setResourcePath("/linked-retrieval/linked-retrieval-entry/v2/linkedRetrieval/commands/genericSearch");
request.setRequestPattern(AlibabaCloud::CommonRequest::RequestPattern::RoaPattern);
request.setHeaderParameter("Content-Type", "application/json");
auto response = client.commonResponse(request);
if (response.isSuccess()) {
printf("request success.\n");
printf("result: %s\n", response.result().payload().c_str());
}
else {
printf("error: %s\n", response.error().detail().c_str());
}
AlibabaCloud::ShutdownSdk();
return 0;
}
返回結構體
字段 | 字段類型 | 是否可空 | 字段說明 | 樣例 | ||
requestId | string | 不可空 | 請求RequestId, 排查問題時可以提供此信息 | |||
pageItems[] | cardType | string | 不可空 | 卡片類型,目前支持
| structure_web_info | |
title | string | 可空 | 網站標題 | 2024五一勞動節放假調休時間表(附放假日歷) | ||
htmlTitle | string | 不可空 | 網站標題,html內容 | <em>2024五一</em>勞動節<em>放假</em>調休<em>時間表</em>(附放假日歷)-本地寶 | ||
link | string | 不可空 | 網站地址 | http://m.sh.bendibao.com/tour/278811.html | ||
displayLink | string | 不可空 | 可讀的網站地址 | m.sh.bendibao.com | ||
htmlSnippet | string | 不可空 | 網頁動態摘要,匹配到關鍵字的部分內容,最長250字符 說明 此字段可以作為RAG場景的召回context,如果需要更全的網站正文,可以使用mainText | <em>2024五一</em>勞動節<em>放假安排</em>:5月1日至5日<em>放假</em>調休,共5天。4月28日(星期日)、5月11日(星期六)上班。 | ||
publishTime | int64 | 不可空 | 發布時間,單位(毫秒),對于部分沒有發布時間的網站會使用默認值:0 | 1714123620000 | ||
score | double | 不可空 | 相關度分數 | |||
mainText | string | 可空 | 網頁正文,默認正文前500字符,如需長正文(前3000字符)請聯系您的阿里云客戶經理進行開通。 重要 目前已支持structure_web_info、news_uchq等高頻召回結果正文解析。 | 導語\t\t \t\t2024\t五一\t勞動\t節\t放假\t安排\t:\t5\t月\t1\t日\t至\t5\t日\t放假\t調休\t,\t共\t5\t天\t。\t4\t月\t28\t日\t(\t星期\t日\t)\t、\t5\t月\t11\t日\t(\t星期\t六\t)\t上班\t。\t\t\n\t\t2024\t五一\t勞動\t節\t放假\t安排\t\t\n\t\t5\t月\t1\t日\t至\t5\t日\t放假\t調休\t,\t共\t5\t天\t。\t4\t月\t28\t日\t(\t星期\t日\t)\t、\t5\t月\t11\t日\t(\t星期\t六\t)\t上班\t。\t\t\n\t\t第\t一\t天 | ||
images[] | imageLink | string | 可空 | 圖片地址 | https://imgbdb4.bendibao.com/shbdb/news/202310/26/20231026112304_25716.jpg | |
width | int32 | 可空 | 寬度:像素 | 864 | ||
height | int32 | 可空 | 高度:像素 | 1704 | ||
pageMap | htmlSnippetTruncate | string | 可空 | 網頁動態摘要是否被截斷,超出長度時會被截斷
| 0 | |
mainTextTruncate | string | 可空 | 網頁正文是否被截斷,超出長度時會被截斷
| 1 | ||
hostname | string | 可空 | 站點名 | 新華網 | ||
hostLogo | string | 可空 | 站點的logo | |||
siteLabel | string | 可空 | 站點標簽,當前支持:
說明 此字段可以輔助進行權威性判定,為政府認定媒體,故召回率不高。 | 權威媒體 | ||
weiboItems[] 可空 | cardType | string | 不可空 | 卡片類型,固定為weibo_strong; query能夠匹配到微博場景才會返回微博數據 | weibo_strong | |
username | string | 不可空 | 微博用戶名 | 白鹿科技 | ||
link | string | 不可空 | 搜索結果微博地址 | https://m.weibo.cn/detail/5024099350350075?wm=90194_90009 | ||
htmlSnippet | string | 不可空 | 微博內容 | 【小調查:你會買<em>小米SU7</em>嗎?】#小米SU7路測覆蓋300多城市#4月17日,@小米汽車 發文稱SU7道路測試覆蓋全國300多個城市,涵蓋極寒,極熱天氣,總里程數高達540萬公里,目前仍在進行中。 網頁鏈接 | ||
publishDisplayTime | string | 可空 | 發布時間 | 1小時前 | ||
images[] | string | 可空 | 微博的附帶圖片 | |||
sceneItems[] 可空 | type | string | 不可空 | 類型,支持的類型請見返回體sceneItems類型及對應detail結構 | time | |
detail | string | 不可空 | 詳細信息,結構體請見返回體sceneItems類型及對應detail結構 | { "title": "東京時間", "targetTimeZone": "Asia/Tokyo", "targetTimeMillisecond": "1733999009797", "targetTime": "2024-12-12 18:23:29", "beijingTimeZone": "PRC", "beijingTimeMillisecond": "1733995409797" } | ||
queryContext | originalQuery | query | string | 不可空 | 原始請求:query | 最近比亞迪的銷量如何 |
timeRange | string | 可空 | 原始請求:timeRange | NoLimit | ||
industry | string | 可空 | 原始請求:industry | |||
page | int32 | 可空 | 原始請求:page | 1 | ||
rewrite | enabled | boolean | 不可空 | 改寫對本次請求是否開啟。目前灰度中,可聯系客戶經理進行開通 | true | |
timeRange | string | 可空 | 改寫后的timeRange,只有改寫后的值與原始timeRange不一致時,才會返回 重要 當客戶指定timeRange為非NoLimit值時,timeRange改寫會被關閉 | OneMonth | ||
searchInformation | total | int64 | 不可空 | 總條數 | 8230595 | |
searchTime | int64 | 不可空 | 搜索耗時 | 1441 |
錯誤碼
接口錯誤碼
Status | 錯誤碼 | 錯誤信息 |
404 | InvalidAccessKeyId.NotFound | Specified access key is not found. |
403 | Retrieval.NotActivate | Please activate AI search service |
403 | Retrieval.Arrears | Please recharge first. |
403 | Retrieval.NotAuthorised | Please authorize the AliyunImarketingFullAccess to the sub-account |
403 | Retrieval.TestUserPeriodExpired | The test period has expired. |
429 | Retrieval.Throttling.User | Request was denied due to user flow control. |
429 | Retrieval.TestUserQueryPerDayExceeded | The query per day exceed the limit. |