3、问题排查与定位
步骤1: 限定返回记录条数。不提供直接访问末页的入口。
baidu,360,搜狗等搜索引擎都不提供访问末页的请求方式。都是基于如下的请求方式:
通过点击上一下、下一页逐页访问。
这个从用户的角度也很好理解,搜索引擎返回的前面都是相关度最高的,也是用户最关心的信息。
Elasticsearch的默认支持的数据条数是10000条,可以通过post请求修改。
最终,本步骤将支持ES最大返回值10000条数据,每页10条,也就是共显示1000页数据。
步骤2,from size机制问题 ,大于设定页就会慢
【from + size机制】:当Elasticsearch响应请求时,它必须确定docs的顺序,排列响应结果。如果请求的页数较少(假设每页10个docs), Elasticsearch不会有什么问题,但是如果页数较大时,比如请求第100页,Elasticsearch不得不取出第1页到第100页的所有docs,再去除第1页到第99页的docs,得到第100页的docs。
【scroll机制】:相对于from和size的分页来说,使用scroll可以模拟一个传统数据的游标,记录当前读取的文档信息位置。这个分页的用法,不是为了实时查询数据,而是为了一次性查询大量的数据(甚至是全部的数据)。
因为这个scroll相当于维护了一份当前索引段的快照信息,这个快照信息是你执行这个scroll查询时的快照。在这个查询后的任何新索引进来的数据,都不会在这个快照中查询到。但是它相对于from和size,不是查询所有数据然后剔除不要的部分,而是记录一个读取的位置,保证下一次快速继续读取。
from+size方式以及scroll方式优缺点对比:
1)对于from+size方式:当结果足够大的时候,会大大加大内存和CPU的消耗。但,该方式使用非常方便。
2)对于scroll方式: 当结果足够大的时候, scroll 性能更佳。但是不灵活和 scroll_id 难管理问题存在。
【from网络】个人测试:当 结果足够大的时候 产生 scroll_id