如何在不增加限制的情况下绕过elasticsearch的聚合最大存储桶错误?

bis0qfac  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(0)|浏览(425)

我有一个进程,我每天运行,它的责任是计算ip请求,进入某个应用程序,并汇总它在每小时的基础上!但过了一段时间,我得到了以下错误:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "too_many_buckets_exception",
        "reason" : "Trying to create too many buckets. Must be less than or equal to: [10000] but was [10001]. This limit can be set by changing the [search.max_buckets] cluster level setting.",
        "max_buckets" : 10000
      }
    ],
    "type" : "search_phase_execution_exception",
    "reason" : "all shards failed",
    "phase" : "query",
    "grouped" : true,
    "failed_shards" : [
      {
        "shard" : 0,
        "index" : "ipreq-20201017",
        "node" : "Pd-QGKviSZeHVPhIPiX92A",
        "reason" : {
          "type" : "too_many_buckets_exception",
          "reason" : "Trying to create too many buckets. Must be less than or equal to: [10000] but was [10001]. This limit can be set by changing the [search.max_buckets] cluster level setting.",
          "max_buckets" : 10000
        }
      }
    ]
  },
  "status" : 503
}

我不明白!为什么elastic search抱怨bucket限制,它似乎没有清理任何已创建的内容!另外,我不想增加 search.max_buckets 因为过了一段时间我也会有同样的问题,因为再到这里只是时间问题!
我正在使用的索引的Map如下所示:

{
  "ipreq-20201017" : {
    "mappings" : {
      "properties" : {
        "at" : {
          "type" : "date"
        },
        "count" : {
          "type" : "integer"
        },
        "ip" : {
          "type" : "keyword"
        }
      }
    }
  }
}

注意:您可以从索引的名称猜到,我正在将每天的访问存储到一个单独的索引中,处理完数据后,我将删除该索引!
下面列出了我用于从目标索引聚合数据的查询,我尝试在20个分区中获取数据。

{
  "size":0,
  "aggs":{
    "ips":{
      "terms":{
        "field":"ip",
        "include":{
          "partition":0,
          "num_partitions":20
        },
        "size":1000000
      },
      "aggs":{
        "ats":{
          "terms":{
            "script":{
              "source":"doc.at.value.hour"
            },
            "size":24
          }
        }
      }
    }
  }
}

样本数据:

{
  "ip":"58.252.205.49",
  "count":1,
  "at":"2020-10-16T22:45:05UTC"
}

问题:

在所有这些情况下,我做错了什么?
我如何解决我的问题,关于 max_bucket 错误?
有什么方法可以清理以前创建的桶吗?
附言:我在网上查了很多,但找不到任何解决我具体问题的方法。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题