标准搜索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.0</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.0
调用代码
import os
from alibabacloud_iqs20241111 import models
from alibabacloud_iqs20241111.client import Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_sse.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.0
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.安装相关依赖,参照https://github.com/aliyun/aliyun-openapi-cpp-sdk/blob/master/README-CN.md
3.对核心依赖库进行编译: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字符)请联系您的阿里云客户经理进行开通。 重要 此字段只有在cardType=structure_web_info时存在。其他卡片场景为空 | 导语\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 | ||
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 | 可空 | 微博的附带图片 | |||
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. |