# 分页搜索、deep paging
- 讲解如何使用es进行分页搜索的语法
- 什么是deep paging问题?为什么会产生这个问题,它的底层原理是什么?
# 分页语法
由以下两个参数控制:
- from:从那一条数据开始?
- size:获取多少条
GET /_search?size=10
GET /_search?size=10&from=0
GET /_search?size=10&from=20
1
2
3
2
3
GET /test_index/test_type/_search
---------- 响应
"hits": {
"total": 8,
"max_score": 1,
"hits": [
]
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
TIP
这里还是证明了前面某一章节解释 hits.total 解释错的。这里的数量就是这次你查询的总数量
对于这 8 条数据进行每页 3 条数据的分页,大致是以下请求
GET /test_index/test_type/_search?from=0&size=3
GET /test_index/test_type/_search?from=3&size=3
GET /test_index/test_type/_search?from=6&size=3
1
2
3
2
3
# deep paging
什么是 deep paging ?
看下图,记住一个知识点:分页搜索 10 条数据,在搜索深分页(比如 10000 条以后的数据), 每个节点会返回 10000+ 条数据进行排序后再选中其中的 10 条数据返回;
这资源耗费是很大的,就如同 mycat 中的分页是一个原理,需要协调节点来聚合并返回结果,但是这个 es 是怎么解决的呢?