本文介绍UnifiedSearch(IQS 统一搜索)的接口参数以及使用方法。轻量版引擎介绍:轻量版(LiteAdvanced)搜索引擎
接口定义
请求参数
参数 | 类型 | 必填 | 默认值 | 描述 | 示例值 | |
query | string | 是 | - | 搜索问题。取值范围:1~1024个字符。 | 苹果手机 | |
timeRange | string | 否 | NoLimit | 查询的时间范围。支持可选值:
| NoLimit | |
category | string | 否 | null | 查询分类,指定后只返回category圈定的站点的搜索结果,多个行业使用逗号分隔。支持可选值:
说明 一般通用场景,不要指定category,会影响召回效果。 | ||
engineType | string | 否 | LiteAdvanced | 搜索的引擎类型,不同引擎价格与结果会有差异。支持可选值:
| LiteAdvanced | |
contents | mainText | bool | 否 | false | 是否返回长正文。 | false |
markdownText | bool | 否 | false | 是否返回markdown格式正文。 | false | |
summary | bool | 否 | false | 是否返回增强摘要。收费选项; | false | |
rerankScore | bool | 否 | true | 是否进行检索结果的Rerank,并返回rerankScore。 | true | |
advancedParams | map<string, string> | 否 | {} | 高级检索参数:
| | |
返回参数
字段 | 类型 | 是否可空 | 字段说明 | 样例 (Query: 上海车展最火爆的是哪个品牌) | ||
requestId | string | 不可空 | 请求RequestId, 排查问题时可以提供此信息 | 35E5608A-A737-2038-384D-D9D34C6BFD9E | ||
pageItems[] | title | string | 不可空 | 网站标题 | 上海车展大佬齐聚 问界成为话题中心 | |
link | string | 不可空 | 网站地址 | - | ||
snippet | string | 不可空 | 网页动态摘要,匹配到关键字的部分内容,平均长度150字符 说明 engineType=LiteAdvanced时,返回的长度约500字,信息更多,此时无需使用summary。 | - | ||
publishedTime | string | 可空 | 网页发布时间,ISO时间格式。 | 2025-04-27T20:36:04+08:00 | ||
mainText | string | 可空 | 解析得到的网页全正文,长度最大3000字符,召回比例超过98%; 说明 开启contents.mainText时返回 | - | ||
markdownText | string | 可空 | 解析得到的网页全文markdown格式,对表格等结构化信息有更好的支持,目前召回比例约50%,待持续提高。 说明 开启contents.markdownText时返回 | - | ||
images | string[] | 可空 | 网页中的图片地址。 | - | ||
hostname | string | 可空 | 网页的站点名称 | 中华网 | ||
hostLogo | string | 可空 | 网页的站点Logo | - | ||
summary | string | 可空 | 从网页全正文中提取出与查询(Query)最相关的信息,用于提供增强摘要,默认长度约500字 说明 开启contents.summary时返回 | - | ||
rerankScore | double | 可空 | 使用rerank模型对引擎召回结果进行重排序,相关性会有提升。 说明 开启contents.rerankScore时返回,并影响排序 | 0.7786493301391602 | ||
websiteAuthorityScore | int32 | 可空 | 静态站点权威分,仅由网站自身决定,可参考静态权威分评分标准 | 2 | ||
searchInformation | searchTime | int64 | 不可空 | 搜索耗时 | 1048 | |
queryContext | engineType | string | 不可空 | 搜索的引擎类型 | LiteAdvanced | |
originalQuery | query | string | 不可空 | 原始请求:query | 现在伦敦时间 | |
timeRange | string | 不可空 | 原始请求:timeRange | NoLimit | ||
rewrite | enabled | bool | 不可空 | 本次请求是否开启改写 | false | |
timeRange | string | 可空 | 改写后的timeRange,只有改写后的值与原始timeRange不一致时,才会返回。 | - | ||
costCredits | search | genericTextSearch | int32 | 不可空 | 基础文本搜索次数;计量计费信息请参考:产品计费说明 | 1 |
liteAdvancedTextSearch | int32 | 不可空 | 轻量版文本搜索次数;计量计费信息请参考:产品计费说明 | 0 | ||
valueAdded | summary | int32 | 不可空 | 增值包-增强摘要次数 | 1 | |
advanced | int32 | 不可空 | 增值包-增强版搜索次数 | 0 | ||
示例
请求参数(RequestBody)
{
"query": "2025跨年晚会周深齐豫欢颜",
"engineType": "LiteAdvanced",
"contents": {
"mainText": false,
"markdownText":false,
"summary": false,
"rerankScore": true
},
"advancedParams": {
"numResults": "2",
"startPublishedDate": "2024-12-01",
"endPublishedDate": "2025-01-31"
}
}返回参数
{
"requestId": "09277650-90de-468e-b299-09048b1c149d",
"pageItems": [
{
"title": "2025北京卫视跨年之夜(2024.12.31) 周深、齐豫合唱《欢颜》",
"link": "https://m.youku.com/video/id_XNjQ0ODQ5MTk3Mg==.html?source=",
"snippet": "2025北京卫视<em>跨年</em>之夜(2024.12.31)<em>周深</em>、<em>齐豫</em>合唱《<em>欢颜</em>》是在优酷播出的综艺高清视频,于2025-01-02 22:02:01上线。视频内容简介:2025北京卫视<em>跨年</em>之夜(2024.12.31)<em>周深</em>、<em>齐豫</em>合唱《<em>欢颜</em>》",
"publishedTime": "2024-12-31T00:00:00+08:00",
"mainText": null,
"markdownText": null,
"images": [
"https://m.ykimg.com/0542060167769AAC39525FBC7104B9EC"
],
"hostname": "优酷视频",
"hostLogo": "https://s2.zimgs.cn/ims?kt=url&at=smstruct&key=aHR0cHM6Ly9ndy5hbGljZG4uY29tL0wxLzcyMy8xNTYyODM2MzEzL2ZiL2VmLzkyL2ZiZWY5MmQwNDlhMGViMWZkMWM0MTI0ZjNjMmQzMDAwLmpwZw==&sign=yx:4iAKsNYcDPoZnsM8V51ZWwFQdW0=&tv=400_400",
"summary": null,
"rerankScore": 0.9996540546417236,
"websiteAuthorityScore": 2
},
{
"title": "#周深齐豫合唱欢颜#",
"link": "https://m.weibo.cn/status/P7rt709xu",
"snippet": "#周深齐豫合唱欢颜# 没有人能逃过周深《欢颜》的 “魔法”,尤其是跨年版本。他的歌声如同一幅绚丽的画卷,在跨年的时刻徐徐展开。每一年都盼着他的歌声跨年,这次与齐豫合唱,必将为画卷增添浓墨重彩的一笔。 k 收起 查看大图",
"publishedTime": "2024-12-31T20:18:00+08:00",
"mainText": null,
"markdownText": null,
"images": [],
"hostname": "微博",
"hostLogo": "https://s2.zimgs.cn/ims?kt=url&at=smstruct&key=aHR0cHM6Ly9ndy5hbGljZG4uY29tL0wxLzcyMy8xNTg0MzMwMjI4LzNkL2RhLzYwLzNkZGE2MDFlY2VlMmI2NGU3ZjAwNzdlMjYzZTA2YTI2Lmljbw==&sign=yx:ODPA0xcJzTX_28mEs3rV87Z1pvw=&tv=400_400",
"summary": null,
"rerankScore": 0.9994966983795166,
"websiteAuthorityScore": 2
}
],
"sceneItems": [],
"searchInformation": {
"searchTime": 774
},
"queryContext": {
"engineType": "LiteAdvanced",
"originalQuery": {
"query": "2025跨年晚会周深齐豫欢颜",
"timeRange": "NoLimit"
},
"rewrite": {
"enabled": false,
"timeRange": null
}
},
"costCredits": {
"search": {
"genericTextSearch": 0,
"liteAdvancedTextSearch": 1
},
"valueAdded": {
"summary": 0,
"advanced": 0
}
}
}错误码
Status | 错误码 | 错误信息 | 处理方案 |
404 | InvalidAccessKeyId.NotFound | Specified access key is not found. | 检查并确保AccessKey/Secret正确。 |
403 | Retrieval.NotActivate | Please activate AI search service | 请下单或联系您的客户经理进行开通。 |
403 | Retrieval.Arrears | Please recharge first. | 账户金额不足,请充值。 |
403 | Retrieval.NotAuthorised | Please authorize the AliyunIQSFullAccess privilege to the sub-account. | 子账号没有进行授权,参考创建RAM用户并授权。 |
403 | Retrieval.TestUserPeriodExpired | The test period has expired. | 测试已到期(自下单后15天有效),可以联系阿里云客户经理转正式。 |
429 | Retrieval.Throttling.User | Request was denied due to user flow control. | 超出限流规格,可联系阿里云客户经理进行升配。 |
429 | Retrieval.TestUserQueryPerDayExceeded | The query per day exceed the limit. | 测试超出日限额(1000次/天),可以联系阿里云客户经理转正式。 |
400 | Retrieval.InvalidPublishedDate | The specified parameter 'startPublishedDate' has an invalid date format. The correct format should be 'yyyy-MM-dd'. | 高级检索的发布开始时间格式错误。 |
接口调用
SDK调用
使用阿里云AK/SK认证方式,并使用阿里云SDK发起接口调用
Python SDK
前提条件
您需要确保已安装Python3.8或以上版本。
安装SDK
pip3 install alibabacloud_iqs20241111==1.6.1调用代码
同步调用
import os
from Tea.exceptions import TeaException
from alibabacloud_iqs20241111 import models
from alibabacloud_iqs20241111.client import Client
from alibabacloud_tea_openapi import models as open_api_models
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> Client:
config = open_api_models.Config(
# TODO: 使用您的AK/SK进行替换(建议通过环境变量加载)
access_key_id='$YOUR_ACCESS_KEY',
access_key_secret='$YOUR_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.UnifiedSearchRequest(
body=models.UnifiedSearchInput(
query='杭州美食',
time_range='NoLimit',
engine_type='LiteAdvanced',
contents=models.RequestContents(
summary=False,
main_text=True,
),
advanced_params=dict(
numResults="20",
startPublishedDate="2025-01-01"
)
)
)
try:
response = client.unified_search(run_instances_request)
print(
f"api success, request_id:{response.body.request_id}, size :{len(response.body.page_items)}, server_cost:{response.body.search_information.search_time}")
if len(response.body.scene_items) > 0:
print(f"scene_items:{response.body.scene_items[0]}")
for index, item in enumerate(response.body.page_items):
print(f"{index}. {'-' * 20}")
print(f"title:{item.title}")
print(f"snippet:{item.snippet}")
print(f"summary:{item.summary}")
print(f"published_time:{item.published_time}")
print(f"link:{item.link}")
print(f"rerank_score:{item.rerank_score}")
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()
异步调用
import asyncio
import os
import time
from Tea.exceptions import TeaException
from alibabacloud_iqs20241111 import models
from alibabacloud_iqs20241111.client import Client
from alibabacloud_tea_openapi import models as open_api_models
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
async def main_async() -> None:
start = time.time()
client = Sample.create_client()
run_instances_request = models.UnifiedSearchRequest(
body=models.UnifiedSearchInput(
query='杭州美食',
time_range='NoLimit',
contents=models.RequestContents(
summary=False,
main_text=True,
)
)
)
try:
# 使用异步方法
response = await client.unified_search_async(run_instances_request)
print(
f"api success, request_id:{response.body.request_id}, size :{len(response.body.page_items)}, server_cost:{response.body.search_information.search_time}")
if len(response.body.scene_items) > 0:
print(f"scene_items:{response.body.scene_items[0]}")
for index, item in enumerate(response.body.page_items):
print(f"{index}. {'-' * 20}")
print(f"title:{item.title}")
print(f"snippet:{item.snippet}")
print(f"summary:{item.summary}")
print(f"published_time:{item.published_time}")
print(f"link:{item.link}")
print(f"rerank_score:{item.rerank_score}")
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__':
asyncio.run(Sample.main_async())Java SDK
前提条件
已安装Java8或以上版本。
Maven依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>iqs20241111</artifactId>
<version>1.6.1</version>
</dependency>调用代码
package com.aliyun.iqs.example;
import com.aliyun.iqs20241111.Client;
import com.aliyun.iqs20241111.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class UnifiedSearchExample {
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 = "$YOUR_ACCESS_KEY";
String accessKeySecret = "$YOUR_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) {
UnifiedSearchInput input = new UnifiedSearchInput();
input.setQuery(query);
input.setTimeRange(timeRange);
// 使用LiteAdvanced引擎,并使用高级检索参数
input.setEngineType("LiteAdvanced");
Map<String, String> advancedParams = new HashMap<>();
advancedParams.put("numResults", "5");
advancedParams.put("startPublishedDate", "2025-08-01");
advancedParams.put("excludeSites", "baidu.com,sina.cn");
input.setAdvancedParams(advancedParams);
RequestContents requestContents = new RequestContents().setSummary(false).setMainText(false);
input.setContents(requestContents);
UnifiedSearchRequest request = new UnifiedSearchRequest().setBody(input);
try {
UnifiedSearchResponse response = client.unifiedSearch(request);
UnifiedSearchOutput result = response.getBody();
printOutput(result);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void printOutput(UnifiedSearchOutput output) {
// 使用 GsonBuilder 创建带格式化的 Gson 实例
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create();
// 输出格式化的 JSON
String prettyJson = gson.toJson(output);
System.out.println(prettyJson);
}
}
HTTP调用
使用信息查询服务(IQS)产品的凭证(API-KEY)进行认证,并使用HTTP发起接口调用。创建并查看凭证,获取API-KEY。
LiteAdvanced
curl -X POST https://cloud-iqs.aliyuncs.com/search/unified \
--header "Authorization: Bearer $API_KEY" \
--header "Content-Type: application/json" \
--data '{
"query": "杭州美食",
"engineType": "LiteAdvanced",
"contents": {
"mainText": false,
"markdownText":false,
"summary": false
},
"advancedParams":{
"numResults": "2",
"startPublishedDate": "2025-07-01",
"excludeSites":"aliyun.com,sina.cn"
}
}'$API_KEY 替换为信息查询服务控制台中创建的API-KEY,创建并查看凭证创建API-KEY需要等待5min生效。