沙师弟,师父的充电器掉了

terms多级聚合,查询瞬间内存占用高达3g

Elasticsearch | 作者 viggon | 发布于2022年07月28日 | 阅读数:1581

直接熔断报错了,请问大佬有没有什么解决方案,急用谢谢了
查询语句:

{
  "from": 0,
  "size": 0,
  "query": {
    "bool": {
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "version": true,
  "explain": false,
  "aggregations": {
    "effectStatusAgg": {
      "terms": {
        "field": "effectStatus.code.keyword",
        "size": 999999,
        "min_doc_count": 1,
        "shard_min_doc_count": 0,
        "show_term_doc_count_error": false,
        "order": [
          {
            "_count": "desc"
          },
          {
            "_key": "asc"
          }
        ]
      },
      "aggregations": {
        "lawIdList": {
          "top_hits": {
            "from": 0,
            "size": 999999,
            "version": false,
            "seq_no_primary_term": false,
            "explain": false
          }
        }
      }
    }
  }
}
报错:
	"reason": {
"type": "circuit_breaking_exception",
"reason": "[parent] Data too large, data for [indices:data/read/search[phase/query]] would be [4094396904/3.8gb], which is larger than the limit of [4080218931/3.7gb], real usage: [4094395984/3.8
猜测是由于tophits返回的集合太大了而超时(大概最多有几千个元素,去掉这一项查询就不报错了),请问各位大佬有没有设么解决办法
已邀请:

zmc - ES PAAS、JuiceFS

赞同来自:

从DSL看,你是想对全量数据做聚合计算,terms和子聚合top_hits都是999999,这样肯定耗内存的,每个分片都要计算当前分片的所有数据,还要聚合到一个节点做最终的统一计算。
 
解决的话,有资源直接扩容,没资源的话减小返回的数量,或者牺牲一点准确性,调整 shard_size

要回复问题请先登录注册