【发布时间】:2021-01-19 16:57:35
【问题描述】:
使用search_after 优于size 和from 的优势在于,对于深页,整个结果集不必加载到内存中。
The docs说:
避免使用 from 和 size to page 太深或一次请求太多结果。搜索请求通常跨越多个分片。每个分片必须将其请求的命中和任何先前页面的命中加载到内存中。对于深页或大型结果集,这些操作会显着增加内存和 CPU 使用率,从而导致性能下降或节点故障。
但是,当我将search_after 与这样的存储桶聚合一起使用时:
GET /my_index/_search
{
"size": 10,
"query": { "match_all": {} },
"search_after": [1611064800000,6609534],
"sort": [
{"date": "asc"},
{"tie_breaker": "asc"}
],
"aggs" : {
"cities" : {
"terms": {
"field": "cityId"
}
}
}
}
无论search_after 值如何,Elastic 都会返回相同的聚合结果。这是正确的。但是,它如何在不将整个结果集加载到内存的情况下计算存储桶呢?
【问题讨论】:
标签: elasticsearch