ElasticSearch circuit_breaking_exception(数据太大)与 significant_terms 聚合

标签 elasticsearch significant-terms

查询:

{
  "aggregations": {
    "sigTerms": {
      "significant_terms": {
        "field": "translatedTitle"
      },
      "aggs": {
        "assocs": {
          "significant_terms": {
            "field": "translatedTitle"
          }
        }
      }
    }
  },
  "size": 0,
  "from": 0,
  "query": {
    "range": {
      "timestamp": {
        "lt": "now+1d/d",
        "gte": "now/d"
      }
    }
  },
  "track_scores": false
}

错误:

{
  "bytes_limit": 6844055552,
  "bytes_wanted": 6844240272,
  "reason": "[request] Data too large, data for [<reused_arrays>] would be larger than limit of [6844055552/6.3gb]",
  "type": "circuit_breaking_exception"
}

索引大小为 5G。集群需要多少内存来执行这个查询?

最佳答案

你可以尝试增加request circuit breaker在您的 elasticsearch.yml 配置文件中限制为 41%(默认为 40%)并重新启动您的集群:

indices.breaker.request.limit: 41%

或者如果您不想重新启动集群,您可以使用以下方式动态更改设置:

curl -XPUT localhost:9200/_cluster/settings -d '{
  "persistent" : {
    "indices.breaker.request.limit" : "41%" 
  }
}'

根据显示的数字(即 "bytes_limit": 6844055552, "bytes_wanted": 6844240272)判断,您只缺少大约 190 KB 的堆,因此增加 1% 至 41%您应该为您的请求断路器获得 17 MB 的额外堆(您的总堆 = ~17GB),这应该足够了。

请确保不要将此值增加得太高,因为请求断路器还与 fielddata 断路器和其他组件共享堆,因此您有发生 OOM 的风险。

关于ElasticSearch circuit_breaking_exception(数据太大)与 significant_terms 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37216300/

相关文章:

amazon-web-services - 通过 Cloud Formation 创建 Amazon Elasticsearch Service 时 CloudWatch 资源访问策略错误

elasticsearch - Elasticsearch:计算每个文档中术语的出现频率

java - 如何从elasticsearch获取子聚合

search - 定制分析仪Elasticsearch Soundex Plus Snowball

sql - 高效计算 SQL 中的重要术语

elasticsearch - Elasticsearch重要术语聚合

elasticsearch - "flat"结构的重要术语聚合

java - geo_point 类型的不同格式?