Search 搜索
系统提供了丰富的搜索语法以满足用户各种场景下的搜索需求。
URL
/v3/openapi/apps/$app_name/search?fetch_fields=name&query=config=format:fulljson&&query=name:’zhangsan’&&sort=id
- $app_name 为您的应用名
- 以上 URL 省略了请求Header参数及编码等因素
- 以上 URL 中省略了访问应用的 host 地址
支持格式
JSON
HTTP请求方式
GET
查询参数
查询参数具体拼接规则,请参考
V3版API 签名机制 文档中的描述
- query参数:不能为空,查询的主体。可以通过若干子句的组合来实现多样的搜索需求,query参数中各子句之间通过“&&”进行连接。
- disable参数:目前仅支持禁用 qp,summary,first_rank,second_rank 等参数功能。
- fetch_fields参数:返回文本数据大小对查询性能影响较大,建议只获取需要的字段。
- summary参数:摘要功能参数如下表所示,summary_element_prefix 与 summary_element_postfix 必须同时设定;同时 summary_element 与 (summary_element_prefix、summary_element_postfix)是相互影响的,出现在后面的配置会覆盖前面。另外,目前不支持摘要和飘红单独设置。
返回结果
- searchtime指引擎耗时,单位为秒。
- total、viewtotal、num区别:total为一次查询(不考虑config子句)引擎中符合条件的结果数(在结果数较多情况下,该值会做优化),但考虑到性能及相关性,引擎最多会返回viewtotal个结果,如果需要翻页的话,要求start+hit一定要小于viewtotal,total一般用来做展示。num为本次查询请求(受config子句的start及hit)实际返回的条目,不会超过hit值。
- items 包含查询召回数据信息,其中 fields 为搜索召回内容。
- variableValue 为自定义参数返回结果,如获取 distance 距离值,variableValue 节点只有在config子句的format为“xml”或者“fulljson”时才能展现出来,“json”格式默认不展示。
- sortExprValues 为对应文档排序分。
- facet 用于存放 Aggregate 子句返回的信息。
示例
请求:(此处省略了请求Header参数及编码等因素)
多应用联合查询
- 查询:查询语句必须一致(应用结构可以不一致),该查询会往指定的多个应用分别发送,所以必须保证该查询条件(包含first_formula_name、formula_name及summary等参数)在每个应用上都可以使用。一旦个别应用出现问题,则会报错,并返回其他应用结果。
- 排序:如果用户查询语句中包含sort子句,则获取各个应用结果后按照指定的sort子句再进行一次二次排序;如果没有包含sort子句,则会将各个应用结果交叉展示;如果需要按照相关性(排序表达式)分数进行排序的话,可以显式的在查询语句中指定sort=-RANK。
- 费用计算:对每个应用分别计算一次访问请求。
- 最多支持6个应用查询,超过6个则直接报错无结果。
【v3版 API 多应用查询须知】
- v3版api中多应用查询,各个应用标识只能是由各个应用ID组成,若使用各个应用名标识各个应用会报错。
- v3版api中多应用查询,各个应用之间的分隔符为 “,” 而v2版各个应用之间的分隔符为“;” 2个版本之间有区别。
- 在拼接canonicalized_resource签名字符串参数时,该应用分隔符“,”也需进行urlencode编码,例如“%2C”被编码成这个内容。
- 在拼接最终用于发送http查询请求串时,该应用分隔符“,”需进行urldecode解码,不可以是urlencode编码后的内容。
- v3版api是支持多应用查询功能,用户可以自己实现v3版api多应用查询鉴权来实现多应用查询功能,v3版Php SDK已经支持多应用查询,但v3版Java SDK 目前还不支持多应用查询,后续会升级到下个版本进行多应用查询支持。
Scroll 扫描
传统搜索场景的主要目的是为了尽量短的时间内召回最符合的结果,所以对搜索结果进行了限制,例如 search方法最多只能召回5000条文档。在某些场景下需要提供更多的结果来进行分析工作,可以使用scroll接口来获取更多的结果。
[backcolor=transparent]目前scorll只支持 query子句,config子句(start参数无效),filter子句,sort 子句只支持单字段int类型(仅限v3版api及SDK),以及fetch_fields参数。
URL
首次查询
/v3/openapi/apps/$app_name/search?search_type=scan&scroll=1m&查询参数
后续查询
/v3/openapi/apps/$app_name/search?scroll_id=$scroll_id&scroll=1m&查询参数
- $app_name 为您的应用名
- 以上 URL 中省略了访问应用的 host 地址
- 以上2次 scroll请求 URL 省略了请求Header参数,查询参数对应内容,及编码等因素,完整scroll 请求 URL 参考下面示例描述
- scroll 方法支持的功能较少,大部分功能都不支持,具体功能限制参考底部注意事项
支持格式
JSON
HTTP请求方式
GET
查询参数
返回结果
- scroll 返回结果格式,目前只支持返回为fulljson,json格式。
示例
第一次请求:(此处省略了请求Header参数及编码等因素)
注意事项
- config子句中 start 无效,通过hit值设置每次返回的结果数;
- aggregate、distinct、粗精排表达式等都无效,如果传入,查询会报错,有可能会无结果,sort子句不支持复杂排序,在v3版 api及SDK 中仅支持单字段int类型进行排序;
- 不支持多应用scroll查询;
- 如果用户传入的scroll_id是非法的,那么查询会报错,返回结果格式支持fulljson,json。
- 第一次查询将不返回实际文档数据,只返回scroll_id,需要再次设置上一次查询返回的scroll_id进行访问才能拿到搜索结果。