36.Scroll 是如何进行分页的?他和from + size 分页的区别是什么? 嘻哈的简写笔记——Elastic Search

ES中from+size 查询是有限制的,from和size两者之和不能超过1万

原理
第一种分页方式:from+size在ES查询数据的方式:

第一步现将用户指定的关键进行分词。
第二步将词汇去分词库中进行检索,得到多个文档的id。
第三步去各个分片中去拉取指定的数据。耗时较长。
第四步将数据根据score进行排序。耗时较长。
第五步根据from的值,将查询到的数据舍弃一部分。
第六步返回结果。
下一页的话再重复整个过程!!!

这种方式相当于limit;数据量不能过大!!!

那么,为什么数据量不能过大呢?是因为这种方式在检索的时候,会根据关键词把所有的数据都检索出来,也就是在拉取的时候耗时比较长的原因;如果数据量过大那全都是在那里浪费查询资源;举个例子,我们这一页只显示10个数据;但是我们却检索出了100万条数据,而且还要拉取这100万条数据(它拉取数据不会根据分页来,而是根据搜索来),而且多余数据再给你删掉;所以呢?如果数据量过大,这种分页方式就太浪费资源了(毕竟你只用10条数据);


第二种分页:滚动(scroll)分页
scroll+size在ES查询数据的方式

第一步现将用户指定的关键进行分词。
第二步将词汇去分词库中进行检索,得到多个文档的id。100id
第三步将文档的id存放在一个ES的上下文中。100id
第四步根据你指定的size的个数去ES中检索指定个数的数据,拿完数据的文档id,会从上下文中移除。80id
第五步如果需要下一页数据,直接去ES的上下文中,找后续内容。
第六步循环第四步和第五步;

第一步和第二步是相同的,第三步的时候他不会直接去拉取数据,而是先把检索的全部id存放在缓存中(ES 的上下文) 中;第四步它按照分页的情况去找id,然后找到id之后,再按照id去拉取数据;

声明:缓存中100万条id可比100万条数据要少的多;然后如果你拿了一部分数据,那么这些数据id会从缓存中移除;也就是:如果你第一页有10条数据,这10条数据的id就会从缓存(ES的上下文)中移除;然后当你点击下一页的时候呢,就会重复第四步,根据分页找id(也就是直接在剩下的id里面找),再根据id去拉取数据拉取数据之后缓存中清除这部分id

注意:Scroll查询方式,不适合做实时的查询
为什么它不适合做实时呢? 主要是因为他把id都放到了缓存(ES的上下文)中了。如果此时数据更改了,那么缓存中的id并不会因此而改

注意:Scroll查询也不能从中间开始看不能从中间某一页开始查;因为它要按照顺序清除缓存的;

总结:他们的主要区别在于滚动分页scroll+size不会一次性的拉取全部数据;另外如果下一页的话他也不会进行全部的重新查一遍

。。。。。。。。。。。。。

嘻哈的简写笔记

。。。。。。。。。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值