面试题答案
一键面试scroll方式
- 适用场景:适合一次性处理大量数据,例如数据迁移、全量分析等场景。但不适合实时性要求高以及用户随机跳页的场景,因为它维护的是一个快照,随着数据更新,快照与实时数据可能存在差异。
- 实现步骤:
- 发起初始查询时,带上
scroll
参数指定滚动时间,例如:
- 发起初始查询时,带上
{
"query": {
"match_all": {}
},
"size": 10,
"scroll": "1m"
}
- Elasticsearch返回结果中包含`_scroll_id`,通过这个`_scroll_id`可以继续获取下一页数据,请求如下:
{
"scroll": "1m",
"scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}
search_after方式
- 适用场景:适合用户随机跳页场景,能获取到实时数据,因为每次请求都是基于实时数据。
- 实现步骤:
- 第一次查询指定
size
为每页数据量,同时指定一个排序字段,例如:
- 第一次查询指定
{
"query": {
"match_all": {}
},
"size": 10,
"sort": [
{
"id": {
"order": "asc"
}
}
]
}
- 后续跳页时,将上一页最后一条数据的排序字段值作为`search_after`参数传入,例如:
{
"query": {
"match_all": {}
},
"size": 10,
"sort": [
{
"id": {
"order": "asc"
}
}
],
"search_after": [10]
}
这里假设id
为排序字段,10
为上一页最后一条数据的id
值。