【问题标题】:Is search_after still beneficial when used along aggregation?与聚合一起使用时,search_after 是否仍然有益?
【发布时间】:2021-01-19 16:57:35
【问题描述】:

使用search_after 优于sizefrom 的优势在于,对于深页,整个结果集不必加载到内存中。

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


    【解决方案1】:

    Hits API 与 Aggregations API 分离,search_after 仅适用于 hits

    如果您需要优化/分页聚合桶,请查看Composite Aggregations

    【讨论】:

    • 谢谢。我不需要对存储桶进行分页。我想知道如何 Elastic 在不实际将文档加载到内存中的情况下计算存储桶。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2015-01-06
    • 2012-07-11
    • 2012-07-04
    • 1970-01-01
    相关资源
    最近更新 更多