分页查询

  1. POST /shop/_doc/_search
  2. {
  3. "query": {
  4. "match_all": {}
  5. },
  6. "from": 0,
  7. "size": 10
  8. }

深度分页

深度分页其实就是搜索的深浅度,比如第1页,第2页,第10页,第20页,是比较浅的;第10000页,第20000页就是很深了。
使用如下操作:

  1. {
  2. "query": {
  3. "match_all": {}
  4. },
  5. "from": 9990,
  6. "size": 10
  7. }
  8. {
  9. "query": {
  10. "match_all": {}
  11. },
  12. "from": 9999,
  13. "size": 10
  14. }

我们在获取第9999条到10009条数据的时候,其实每个分片都会拿到10009条数据,然后集合在一起,总共是10009*3=30027条数据,针对30027数据再次做排序处理,最终会获取最后10条数据。
如此一来,搜索得太深,就会造成性能问题,会耗费内存和占用cpu。而且es为了性能,他不支持超过一万条数据以上的分页查询。那么如何解决深度分页带来的性能呢?其实我们应该避免深度分页操作(限制分页页数),比如最多只能提供100页的展示,从第101页开始就没了,毕竟用户也不会搜的那么深,我们平时搜索淘宝或者百度,一般也就看个10来页就顶多了。
譬如淘宝搜索限制分页最多100页,如下:
深度分页 - 图1