现在我们全局搜索全部的数据,每次返回3条,

从 scroll 请求返回的结果反映了 search 发生时刻的索引状态,就像一个快照。后续的对文档的改动(索引、更新或者删除)都只会影响后面的搜索请求。

为了使用 scroll,初始搜索请求应该在查询中指定 scroll 参数,这可以告诉 Elasticsearch 需要保持搜索的上下文环境多久(参考Keeping the search context alive),如 ?scroll=1m。这里1m表示使用1分钟

使用上面的请求返回的结果中包含一个 scroll_id,这个 ID 可以被传递给 scroll API 来检索下一个批次的结果。

scroll 深分页
from+size查询在10000-50000条数据(1000到5000页)以内的时候还是可以的,但是如果数据过多的话,就会出现深分页问题。

为了解决上面的问题,elasticsearch提出了一个scroll滚动的方式。
scroll 类似于sql中的cursor,使用scroll,每次只能获取一页的内容,然后会返回一个scroll_id。根据返回的这个scroll_id可以不断地获取下一页的内容,所以scroll并不适用于有跳页的情景。

GET test_dev/_search?scroll=5m
{
"query": {
"bool": {
"filter": [
{
"term": {
"age":
}
}
]
}
},
"size": ,
"from": ,
"sort": [
{
"timestamp": {
"order": "desc"
},
"_id": {
"order": "desc"
}
}
]
}
  1. scroll=5m表示设置scroll_id保留5分钟可用。
  2. 使用scroll必须要将from设置为0。
  3. size决定后面每次调用_search搜索返回的数量

然后我们可以通过数据返回的_scroll_id读取下一页内容,每次请求将会读取下10条数据,直到数据读取完毕或者scroll_id保留时间截止:

GET _search/scroll
{
"scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAJZ9Fnk1d......",
"scroll": "5m"
}

注意:请求的接口不再使用索引名了,而是 _search/scroll,其中GET和POST方法都可以使用。

scroll删除
根据官方文档的说法,scroll的搜索上下文会在scroll的保留时间截止后自动清除,但是我们知道scroll是非常消耗资源的,所以一个建议就是当不需要了scroll数据的时候,尽可能快的把scroll_id显式删除掉。

清除指定的scroll_id:

清除指定的scroll_id:

DELETE _search/scroll/DnF1ZXJ5VGhlbkZldGNo.....
 

清除所有的scroll:

DELETE _search/scroll/_all

最新文章

  1. poj 1737男人八题之一 orz ltc
  2. 相克军_Oracle体系_随堂笔记008-存储结构
  3. 今天写项目时,突然发现canvas的一些公式不记得了,所以整理了一番,分享给大家。
  4. LocationManager使用细节
  5. IIS网站部署注意点
  6. 01day2
  7. JAVA String 类
  8. UESTC_树上战争 CDOJ 32
  9. 分布式版本控制系统Git-----9.Git 使用的小技巧
  10. 淘淘商城_day10_课堂笔记
  11. 机器学习笔记-1 Linear Regression(week 1)
  12. Problem B: 点之间的距离
  13. [转]SQL Server为啥使用了这么多内存?
  14. 微信退款回调AES算法(AES-256-ECB)
  15. 如何在github上搭建网站?
  16. Django--filter(**kwargs)
  17. POJ 2417 Discrete Logging BSGS
  18. Linux7安装Oracle 11g 86%报错:Error in invoking target 'agent nmhs' of makefile
  19. netty-socketio 示例代码
  20. The Begining

热门文章

  1. [C#反编译教程]001.Reflector.NET反编译工具 v8.5绿色版+注册机+注册教程
  2. Java并没有衰落.大家对它的认识才刚刚开始 Java8全新出发
  3. (七)剩余DAO代码
  4. JAVA自学笔记(1)
  5. Rocket - devices - TLBusBypass
  6. Rocket - diplomacy - wirePrefix
  7. jchdl - RTL实例 - And
  8. Java IO实现文件(及文件夹)的复制 原创代码【精】
  9. vue-组件化-插槽(slot)
  10. Java实现 LeetCode 670 最大交换(暴力)