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":{}
}
}