scroll(滚屏)
一个滚屏搜索允许我们做一个初始阶段搜索并且持续批量从Elasticsearch里拉取结果直到没有结果剩下。这有点像传统数据库里的cursors(游标)。
滚屏搜索会及时制作快照。这个快照不会包含任何在初始阶段搜索请求后对index做的修改。它通过将旧的数据文件保存在手边,所以可以保护index的样子看起来像搜索开始时的样子。
scan(扫描)
为了使用scan-and-scroll(扫描和滚屏),需要执行一个搜索请求,将search_type
设置成scan
,并且传递一个scroll
参数来告诉Elasticsearch滚屏应该持续多长时间。
(1)保持滚屏开启1分钟。
这个请求的应答没有包含任何命中的结果,但是包含了一个Base-64编码的_scroll_id(滚屏id)
字符串。现在我们可以将 传递给_search/scroll
末端来获取第一批结果:
GET /_search/scroll?scroll=1m (1)
NMd2pjWlJ3YWlBOzExNjpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExNzpRNV9aY1Vy
xfaGl0czoxOw==
(1) 保持滚屏开启另一分钟。
注意,要再次指定?scroll=1m
。滚屏的终止时间会在我们每次执行滚屏请求时刷新,所以他只需要给我们足够的时间来处理当前批次的结果而不是所有的匹配查询的document。
这个滚屏请求的应答包含了第一批次的结果。虽然指定了一个1000的size
,但是获得了更多的document。当扫描时,size
被应用到每一个分片上,所以我们在每个批次里最多或获得size * number_of_primary_shards(size*主分片数)
个document。
如果没有更多的命中结果返回,就处理完了所有的命中匹配的document。
提示: