来自 elastic 官方文档的段落:
我们不再推荐使用滚动 API 进行深度分页。如果
您需要在分页时保留索引状态
10,000 次点击,使用带有时间点的 search_after 参数
(坑)。
Scroll Official Doc Link
我推荐使用分页。
你可以使用
点击次数的限制是为了提高性能,你可以使用分页,它的速度要快得多。
通过这种方式,您可以将起点与form 键一起使用,或将search_after 与sort 和PIT 键一起使用(防止结果不一致的时间点)。并且您可以确定您点击 size 键 10 以获得更快的查询时间。
Pagination Official Doc Link
用于实例化 PIT ID:
POST /test/_pit?keep_alive=1m
用于实例化分页:
GET /test/_search
{
"size": 10,
"query": {
"match" : {
"user.id" : "elkbee"
}
},
"pit": {
"id": "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA==",
"keep_alive": "1m"
},
"sort": [
{"@timestamp": {"order": "asc", "format": "strict_date_optional_time_nanos", "numeric_type" : "date_nanos" }}
]
}
在分页中获取其余数据:
结果中有排序键,放在search_after
GET /test/_search
{
"size": 10,
"query": {
"match" : {
"user.id" : "elkbee"
}
},
"pit": {
"id": "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA==",
"keep_alive": "1m"
},
"sort": [
{"@timestamp": {"order": "asc", "format": "strict_date_optional_time_nanos"}}
],
"search_after": [
"2021-05-20T05:30:04.832Z", #you can find this value from sort key in response
4294967298
],
"track_total_hits": false
}