1. 深度分页

1.1  请求第9990~10000条之间的10条数据

成功请求,没有报错

 1.2  请求9999~10009之间的10条数据

报错如下,es指出请求的最大数据不能超过10000,但是我们数据达到了10009。请往下看

 这是由于es拉取数据是这么拉取的:

1.3 深度分页:

从每个shard中拉取总数10009条,最后在汇总成30027条数据,再对30027条数据进行排序,然后,再从30027条数据中取出9999-10009之间的10条数据(分页),返回给用户。最后再抛弃30027条数据。这样的话,性能就会有很大的损耗。

那么,es就做了限制,查询数据不能超过10000条,否则对性能就有很大的影响。

1.4 淘宝是怎么解决深度分页带来的问题的?

 淘宝做了限制,只能分页到100页。

2.  提升搜索量

由于有查询更多条数据的需求,所以可以通过提升搜索量的方法,来满足查询更多数据的需求。

我们在搜索9999~10009之间的数据时,报错提示,可以修改index.max_result_window的值,以提升搜索量。

 设置index.max_result_window为100000

 查看设置:

 验证:

查询89999~90009之间的数据,成功响应

 查询99999~100009之间的数据,返回错误

原因是超过了设置的100000的限制。 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐