elasticsearch 深分页查询:scroll
ES对from+size是有限制的,from+size 不能超过10000。
原理:
from+size在ES中的查询方式:
将指定关键字分词
将词汇去分词库中检索,得到多个文档id
取各分片中拉去指定数据(耗时较长)
根据scroe排序(耗时较长)
根据from舍弃一部分数据
返回查询结果
scroll在ES中的查询方式:
将指定关键字分词
将词汇去分词库中检索,得到多个文档id
将文档id存放在上下文中
根据指定size去上下文中检索指定个数的数据,拿完数据的文档id,会从上下文中移除
如果需要下一页数据,直接去ES上下文中,查询后续内容
循环4,5
#测试--scroll查询:执行scroll查询,返回第一页数据,并且将文档id信息存放在ES上下文中,指定生存时间1m POST /king_test_person/_search?scroll=1m { "query": { "match_all": {} }, "size": 2, "sort": [ { "age": { "order": "desc" } } ] }
#测试--scroll查询:根据scroll查询下一页数据 POST /_search/scroll { "scroll_id":"FGluY2x1ZGVfY29udGV4dF91dWlkDnF1ZXJ5VGhlbkZldGNoAxZOSFpoaExrN1JVS3RVU1dLbWpuWUlnAAAAAAACTZcWeFdCZGlPRnFTejJXeWJ1ZmlKWEF4QRY4cXpzMU5HbFJZTzdUNm84NXVMdTV3AAAAAAADghwWMHVKNERoTGpRdmF5dm1ZeTZzUk8tURY1QXo5cEhuelRJMk5TMzlJMVdlaG5BAAAAAAAC4_sWUWc4X3M1ZFdUbC01Y0NGODNhbHZwQQ==", "scroll":"1m" }
#测试--scroll查询:删除scroll在ES上下文中的数据 DELETE /_search/scroll/FGluY2x1ZGVfY29udGV4dF91dWlkDnF1ZXJ5VGhlbkZldGNoAxZOSFpoaExrN1JVS3RVU1dLbWpuWUlnAAAAAAACTUwWeFdCZGlPRnFTejJXeWJ1ZmlKWEF4QRY4cXpzMU5HbFJZTzdUNm84NXVMdTV3AAAAAAADgY0WMHVKNERoTGpRdmF5dm1ZeTZzUk8tURY1QXo5cEhuelRJMk5TMzlJMVdlaG5BAAAAAAAC44EWUWc4X3M1ZFdUbC01Y0NGODNhbHZwQQ==