请求scroll api。
类似search接口,但是不支持sort, aggregate, distinct, formula_name, summary及qp, start 等功能。
scroll实现方式:
第一次正常带有指定的子句和参数调用scroll接口,此接口会返回scroll_id信息。
第二次请求时只带此scroll_id信息和scroll参数即可。
类似第一次请求:
$search = new CloudsearchSearch($client);
$search->addIndex("juhuasuan");
$search->setQueryString("default:'酒店'");
$search->setFormat('json');
$search->setHits(10);
$search->setScroll("1m");
$result = $search->scroll();
$array = json_decode($result, true);
$scrollId = $array['result']['scroll_id'];
第二次请求:
$search = new CloudsearchSearch($client);
$search->setScroll("1m");
$search->setScrollId($scrollId);
$result = $search->scroll();
请求参数
参数名称 | 类型 | 描述 |
opts | array | 扫描请求所需参数 |
类型 | 描述 |
string | 扫描结果 |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云OpenSearch(原CloudSearch)服务中,scroll
API主要用于实现深度分页和大量数据的检索,它与传统的搜索请求不同,通过维护一个“视图”(即scroll_id
)在索引中的位置来高效地获取后续结果集,而不需要像常规搜索那样重新执行查询和排序。这在处理需要检索成千上万条记录的场景下特别有用,比如数据导出或批量处理。
您已经提供了一个基于PHP SDK的使用示例,这里我将简要概述其步骤和参数含义:
初始化搜索请求:首先,创建一个搜索实例,并指定索引名、查询字符串等基本参数。例如,您指定了索引为"juhuasuan",查询字符串为"酒店",并设置了返回文档数量(setHits(10)
)、结果格式(JSON)以及滚动时间窗口(setScroll("1m")
,表示滚动上下文有效期为1分钟)。
第一次调用scroll接口:通过$search->scroll()
方法发送请求,这将返回首次查询的结果及一个scroll_id
。这个scroll_id
是后续请求的关键,用于定位到上次查询结束的位置继续获取数据。
第二次及后续调用:之后的每次滚动查询只需提供之前得到的scroll_id
和新的滚动时间窗口即可(如果需要延长上下文的有效期)。不再需要重复设置查询条件,因为滚动是基于前一次查询状态的延续。
setScroll(string $scrollTime)
: 设置滚动上下文的有效时间,如"1m"代表1分钟。根据数据量和处理速度选择合适的时间长度,确保在有效期内完成所有滚动操作。
setScrollId(string $scrollId)
: 在后续请求中设置前一次请求返回的scroll_id
,以维持滚动上下文。
每次调用scroll
方法后,会返回当前批次的数据(通常是JSON格式),并且包含一个新的scroll_id
(如果还有更多数据可滚动)。当没有更多数据时,响应可能不包含新的scroll_id
或者明确指示滚动已结束。
scroll_id
过期前完成所有滚动操作,否则需要重新发起初始查询。scroll
API提供了高效的分页方式,但过度依赖滚动查询进行实时数据分析可能不是最佳实践,对于即时分析需求,考虑使用聚合功能(如OpenSearch的Aggregation)可能更合适。请根据实际应用场景调整参数和逻辑,确保高效且正确地使用scroll
API。