elasticsearch 深度分页问题

Elasticsearch 的深度分页可能导致内存开销过大,传统 from + size 方法受限于默认的 max_result_window。本文介绍了如何使用 Search After API 来解决这个问题,该方法适用于深度分页,能实时获取下一页数据,但要求排序字段必须唯一。示例展示了如何在查询中应用 search_after 参数来避免内存问题。
摘要由CSDN通过智能技术生成

elasticsearch分页对于用过es的人应该都会使用 ,和数据库的分页类似,如下所示,通过from + size可以对数据进行分页。

{
    "from" : 0, 
    "size" : 10,
    "query" : {
        "term" : { "user" : "dejun" }
    }
} 

可以查询1-10条记录,不过由于es是分布式的,数据都是分布在多个分片上。
如查询: from = 990 , size = 10 , 分片数为:4 ,那么es是如何 查询的呢? 如下图所示:

在这里插入图片描述

  • es会在每个分片获取1000条文档,通过Coordinating Node 汇总各个节点的数据,再通过排序选择前1000个文档返回。
  • 所以当页数越深,查询的节点的数量越大,自然占用的内存也越多,那么我们是不是可以把系统内存查爆? ES为了避免深度分页带来的内存开销,ES默认限定只能查询10000个文档

那么我们做个示范:

POST  /demo/_search
{
  "from" : 0 ,
  "size" : 10001 ,
  "query" : {
			"match_all":{}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值