默认只返回10条数据,可以通过from size来控制返回的分页结果
简单分页
GET /indexName/_search
{
query: {
match_all: {}
},
from 990,
size: 10,
sort:[
{"FIELD": "desc"}
]
}
深度分页
由于es一般是集群分布式部署的,所以会面临深度分页的问题
- 首先在每个数据片上都排序查询出前1000条数据
- 然后将所有节点的结果聚合,重新排序选出前1000条数据
如果搜索页面过深,性能消耗较多,因此es设置的查询结果上限是10000
解决方案
search after 分页时需要排序,从上一次排序开始,记录值,查询下一页数据,官方推荐
scroll 将排序数据形成快照,放在内存中,官方不推荐