全部产品
开放搜索

搜索处理

更新时间:2017-09-11 09:18:37   分享:   

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 string 搜索主体,包含所有的查询条件。主要子句包含 config子句query子句sort子句filter子句aggregate子句distinct子句kvpairs子句
fetch_fields string 全部“可展示”字段。 可以通过此参数获取本次查询需要的字段内容,多个字段使用英文分号(;)分隔
qp string 已上线规则 指定要使用的查询分析规则,多个规则使用英文逗号(,)分隔
disable string 关闭指定已生效的参数功能,目前仅支持禁用 qp,summary,first_rank,second_rank 等参数功能
first_rank_name string 系统中默认粗排表达式名字 设置粗排表达式名字
second_rank_name string 系统中默认精排表达式名字 设置精排表达式名字
summary string 获取系统结果摘要配置 动态摘要的配置,可以指定某些字段的飘红、截断等操作。
  • 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)是相互影响的,出现在后面的配置会覆盖前面。另外,目前不支持摘要和飘红单独设置。
参数 类型 必需 取值范围 默认值 描述
summary_field string 要做摘要的字段
summary_element string em 飘红标签,html标签去掉左右尖括号
summary_ellipsis string 摘要的结尾省略符
summary_snipped int 1 选取的摘要片段个数
summary_len string 摘要要展示的片段长度
summary_element_prefix string 飘红的前缀,必须是完整的html标签,如<em>
summary_element_postfix string 飘红的后缀,必须是完整的html标签,如</em>

返回结果

参数 类型 描述
status string 执行结果,OK为成功,FAIL为失败,请根据返回错误码进行排查
request_id string 该条查询的记录id,主要用于排查问题使用
result string 实际返回结果,包括查询耗时searchtime、引擎总结果数total、本次请求返回结果数num、本次查询最大返回结果数viewtotal、查询结果items、统计结果facet等信息
errors string 错误内容,error_message代表错误信息。error_code 对应含义参考 错误码 文档
  • 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参数及编码等因素)

  1. http://host/v3/openapi/apps/app_schema_demo/search?query=config=start:0,hit:20,format:fulljson,rerank_size:200&&query=name:'文档'&&sort=-id;-RANK&&filter=id>0&&distinct=&&aggregate=group_key:cate_id,agg_fun:count(),range:1,max_group:10,agg_sampler_threshold:1,agg_sampler_step:10&first_rank_name=default&second_rank_name=default&fetch_fields=id;name;phone&summary=summary_field:name,summary_len:100,summary_ellipsis:。。。,summary_snippet:2,summary_element_prefix:<em>,summary_element_postfix:</em>&qp=qp&disable=qp

成功返回:

  1. {
  2. "status": "OK",
  3. "request_id": "150149633919672397225629",
  4. "result": {
  5. "searchtime": 0.005112,
  6. "total": 1,
  7. "num": 1,
  8. "viewtotal": 1,
  9. "items": [
  10. {
  11. "fields": {
  12. "id": "10",
  13. "name": "我是一条新<em>文档</em>的标题",
  14. "phone": "18312345678",
  15. "index_name": "app_schema_demo"
  16. },
  17. "property": {},
  18. "attribute": {},
  19. "variableValue": {},
  20. "sortExprValues": [
  21. "10",
  22. "10000.1354238242"
  23. ]
  24. }
  25. ],
  26. "facet": [
  27. {
  28. "key": "cate_id",
  29. "items": [
  30. {
  31. "value": "-9223372036854775808:1",
  32. "count": "1"
  33. }
  34. ]
  35. }
  36. ]
  37. },
  38. "errors": [],
  39. "tracer": ""
  40. }

错误返回:

  1. {
  2. "status": "FAIL",
  3. "request_id": "150149648719953661651650",
  4. "result": {
  5. "searchtime": 0.002225,
  6. "total": 0,
  7. "num": 0,
  8. "viewtotal": 0,
  9. "items": [],
  10. "facet": []
  11. },
  12. "errors": [
  13. {
  14. "code": 6101,
  15. "message": "Index in query clause not exist."
  16. }
  17. ],
  18. "tracer": ""
  19. }

多应用联合查询

  1. 查询:查询语句必须一致(应用结构可以不一致),该查询会往指定的多个应用分别发送,所以必须保证该查询条件(包含first_formula_name、formula_name及summary等参数)在每个应用上都可以使用。一旦个别应用出现问题,则会报错,并返回其他应用结果。
  2. 排序:如果用户查询语句中包含sort子句,则获取各个应用结果后按照指定的sort子句再进行一次二次排序;如果没有包含sort子句,则会将各个应用结果交叉展示;如果需要按照相关性(排序表达式)分数进行排序的话,可以显式的在查询语句中指定sort=-RANK。
  3. 费用计算:对每个应用分别计算一次访问请求。
  4. 最多支持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 目前还不支持多应用查询,后续会升级到下个版本进行多应用查询支持。
  1. 拼接canonicalized_resource签名字符串时多个应用之间正确格式参考,逗号需进行urlencode编码
  2. /v3/openapi/apps/120009914%2C120015980/search?省略查询参数
  3. 拼接最终用于发送http查询请求串时多个应用之间正确格式参考,逗号需进行urldecode解码
  4. /v3/openapi/apps/120009914,120015980/search?省略查询参数

Scroll 扫描

传统搜索场景的主要目的是为了尽量短的时间内召回最符合的结果,所以对搜索结果进行了限制,例如 search方法最多只能召回5000条文档。在某些场景下需要提供更多的结果来进行分析工作,可以使用scroll接口来获取更多的结果。

目前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 STRING 周,日,时,分,秒 表示下一次 scroll请求的有效期,每次请求都必须设置该参数,可以用1m表示1min;支持的时间单位包括:w=Week, d=Day, h=Hour, m=minute, s=second
search_type STRING scan 第一次查询的时必须填写,后续无需填写,后续通过指定 scroll_id 实现下一次查询
scroll_id string 第一次调用scroll方法会返回scroll_id 但并不包含数据,后续每次搜索都必须指定上一次返回scroll_id,并且后续搜索结果中都会返回scroll_id及对应匹配的数据,后续查询该参数必填
query子句 string 用于设置搜索条件
config子句 string 用于设置搜索召回数据格式,及召回文档数
filter子句 string 用于设置过滤条件
sort 子句 string 用于设置文档排序条件(仅支持单字段int类型,仅限v3版 api及SDK)
fetch_fields参数 string 用于设置召回哪些应用字段内容

返回结果

参数 类型 描述
status string 执行结果,OK为成功,FAIL为失败,请根据返回错误码进行排查
request_id string 该条查询的记录id,主要用于排查问题使用
result string 实际返回结果,包括查询耗时searchtime、引擎总结果数total、本次请求返回结果数num、本次查询最大返回结果数viewtotal、查询结果items、统计结果 facet、scorllid 等信息
errors string 错误内容,error_message代表错误信息。error_code 对应含义参考 错误码 文档
  • scroll 返回结果格式,目前只支持返回为fulljson,json格式。

示例

第一次请求:(此处省略了请求Header参数及编码等因素)

  1. http://$host/v3/openapi/apps/app_schema_demo/search?query=config=start:0,hit:1,format:fulljson,rerank_size:200&&query=name:'搜索'&&sort=+id&&filter=id>0&search_type=scan&scroll=1m&fetch_fields=id;name;phone;int_arr;literal_arr;float_arr;cate_id

成功返回:

  1. {
  2. "status": "OK",
  3. "request_id": "150150574119953661605242",
  4. "result": {
  5. "searchtime": 0.005029,
  6. "total": 1,
  7. "num": 0,
  8. "viewtotal": 1,
  9. "scroll_id": "eJxtUMtuhDAM/BrvOYQC5cABdulvRFFIirsm2TpBavv1Ndut1EMlS36NZ0Y2ZHMxbueceAjIuWCMnrPjRITLyfzZm83y9V QVGT8x80U3PxQNUqieVZV1/an4ItbTUBPSx5wgXqKdvOSbmuKR8ZYjGWWirB4tvToAiX7u3G2eCNK77vnz8GlGPAV6suKBeqxAn0OiTd7NGEnesspyoyFLF6hecn4JUKjVgp0K3FnkfMfIyPoDuYWegX9GeYOpicY9TG8gwOSuBL04X1 MMg3ROwCesLlG6X7a2o=",
  10. "items": [],
  11. "facet": []
  12. },
  13. "errors": [],
  14. "tracer": ""
  15. }

后续请求:(此处省略了请求Header参数及编码等因素)

  1. http://$host/v3/openapi/apps/app_schema_demo/search?fetch_fields=id;name;phone;int_arr;literal_arr;float_arr;cate_id&query=config=start:0,hit:1,format:fulljson,rerank_size:200&&query=name:'搜索'&&sort=+id&&filter=id>0&scroll=1m&scroll_id=eJxtUMtuhDAM/BrvOYQC5cABdulvRFFIirsm2TpBavv1Ndut1EMlS36NZ0Y2ZHMxbueceAjIuWCMnrPjRITLyfzZm83y9V+QVGT8x80U3PxQNUqieVZV1/an4ItbTUBPSx5wgXqKdvOSbmuKR8ZYjGWWirB4tvToAiX7u3G2eCNK77vnz8GlGPAV6suKBeqxAn0OiTd7NGEnesspyoyFLF6hecn4JUKjVgp0K3FnkfMfIyPoDuYWegX9GeYOpicY9TG8gwOSuBL04X1+MMg3ROwCesLlG6X7a2o=

返回结果:

  1. {
  2. "status": "OK",
  3. "request_id": "150150574119952551519970",
  4. "result": {
  5. "searchtime": 0.006293,
  6. "total": 1,
  7. "num": 1,
  8. "viewtotal": 1,
  9. "scroll_id": "eJxNT9tugzAM/RrznIRC4YEHaNlvRFFIhteQtE6Qtn39TNdJk2z5dnx8rIPJRdudcqKhl60Uir2Vp06ISv8b6s3QbZCVzpaCdp93XXBzg2wEW9MJ2dWq8q7YVXt0YckDLlBP0WyOw31N8YgYizZEnAUsjkx4VT4k8zexpjiNS/XYHX0NNkWP71BfVyxQjxLUxSfazFH4PYSPnCL3iMniDZq3jN98aFRCgGrZniy8/itkBHWGuYVeQH+B+QzTCUZ1NJ9gj4FVMfrQPr8Y+Hk+dgU14fIDVhtfTw==",
  10. "items": [
  11. {
  12. "fields": {
  13. "cate_id": "0",
  14. "float_arr": "0",
  15. "id": "1",
  16. "int_arr": "0",
  17. "literal_arr": "搜索",
  18. "name": "搜索",
  19. "phone": "18312345678",
  20. "index_name": "app_schema_demo"
  21. },
  22. "property": {},
  23. "attribute": {},
  24. "variableValue": {},
  25. "sortExprValues": [
  26. "1"
  27. ]
  28. }
  29. ],
  30. "facet": []
  31. },
  32. "errors": [],
  33. "tracer": ""
  34. }

注意事项

  • config子句中 start 无效,通过hit值设置每次返回的结果数;
  • aggregate、distinct、粗精排表达式等都无效,如果传入,查询会报错,有可能会无结果,sort子句不支持复杂排序,在v3版 api及SDK 中仅支持单字段int类型进行排序;
  • 不支持多应用scroll查询;
  • 如果用户传入的scroll_id是非法的,那么查询会报错,返回结果格式支持fulljson,json。
  • 第一次查询将不返回实际文档数据,只返回scroll_id,需要再次设置上一次查询返回的scroll_id进行访问才能拿到搜索结果。
本文导读目录
本文导读目录
以上内容是否对您有帮助?