1.from+size浅分页“浅”分页可以理解为简单意义上的分页。它的原理很简单,就是查询前20条数据,然后截断前10条,只返回10-20条数据。这样前10次查询就白白浪费了。GETtest_dev/_search{"query":{"bool":{"filter":[{"term":{"age":28}}]}},"size":10,"from":20,"sort":[{"timestamp":{"order":"desc"},"_id":{"order":"desc"}}]}其中,from定义了目标数据的偏移值,以及大小定义当前返回的数字。默认from为0,size为10,即所有查询默认只返回前10条数据。这里需要了解一下from/size的原理:因为es是基于分片的,假设有5个分片,from=100,size=10。按照排序规则,从5个分片中各取出100条数据,然后聚合成500条数据,选取最后10条数据。经过测试,分页越远,执行效率越低。一般来说,随着from的增加,消费时间也会增加。而且数据量越大,越明显!2.当数据量小于10000-50000条时(1000-5000页),scrolldeeppagingfrom+sizequery还是可以的,但是如果数据过多,就会出现deeppaging问题。为了解决以上问题,elasticsearch提出了滚动的方式。scroll类似于sql中的cursor,使用scroll,一次只能获取一页的内容,然后返回一个scroll_id。根据返回的scroll_id可以不断获取下一页的内容,所以scroll不适合有页面跳转的情况。GETtest_dev/_search?scroll=5m{"query":{"bool":{"filter":[{"term":{"age":28}}]}},"size":10,"from":0,"sort":[{"timestamp":{"order":"desc"},"_id":{"order":"desc"}}]}scroll=5m表示设置scroll_id可用5分钟。使用scroll时,from必须设置为0。size决定了每次调用_search返回的数量,然后我们可以通过数据返回的_scroll_id来读取下一页的内容。每次请求都会读取接下来的10条数据,直到数据读取完毕或者scroll_id保留时间到期:GET_search/scroll{"scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAJZ9Fnk1d......","scroll":"5m"}注意:请求的接口不再使用索引名,而是_search/scroll,这里可以使用GET和POST方法。scroll删除官方文档说scrollretentiontime过后会自动清除scrollsearchcontext,但是我们知道scroll是很耗资源的,所以一个建议是scroll时尽快删除scrolldata不需要数据。明确删除scroll_id。清除指定scroll_id:DELETE_search/scroll/DnF1ZXJ5VGhlbkZldGNo.....清除所有scrolls:DELETE_search/scroll/_all3.search_after深页滚动方式,官方建议不要用于实时请求(一般用于dataexport),因为每个scroll_id不仅占用大量资源,还会生成历史快照,数据的变化不会反映到快照上。search_after分页方式是根据上一页的最后一条数据来确定下一页的位置。同时,在分页请求过程中,如果有索引数据的增删改查,这些变化也会实时反映在游标上。但是需要注意的是,由于每一页的数据都依赖于上一页的最后一个数据,所以不能进行跳页请求。为了找到每一页的最后一条数据,每个文档必须有一个全局唯一的值。官方建议使用_uid作为全局唯一值。其实也可以用业务层的id。GETtest_dev/_search{"query":{"bool":{"filter":[{"term":{"age":28}}]}},"size":20,"from":0,"sort":[{"timestamp":{"order":"desc"},"_id":{"order":"desc"}}]}使用search_after必须设置from=0。这里我使用timestamp和_id作为唯一值进行排序。我们获取最后一条返回的数据中sort属性的值,传给search_after。使用排序返回的值搜索下一页:GETtest_dev/_search{"query":{"bool":{"filter":[{"term":{"age":28}}]}},"size":10,"from":0,"search_after":[1541495312521,"d0xH6GYBBtbwbQSP0j1A"],"sort":[{"timestamp":{"order":"desc"},"_id":{"order":"desc"}}]}你都学会了吗?版权声明:本文为CSDN博主“zhexiao27”原创文章,遵循CC4.0BY-SA版权协议。转载请附上原文出处链接及本声明。
