Elasticsearch在几分钟内响应聚合查询

时间:2019-10-01 08:22:37

标签: elasticsearch bigdata aggregation elasticsearch-aggregation

Document count: 4 Billion
disc size : 2 TB
Primary: 5 
replica: 2
master node : 3
data node: 4 * [16cpu and 64GB ram]
heap size: 30GB
mlock enable : true

最多需要3分钟才能回复聚合查询。根据后续请求,它可以缓存并加快处理速度。有没有一种方法可以加快第一个查询的聚合速度?

示例汇总查询:

{
  "query": {
    "bool": {
      "must": [],
      "must_not": [],
      "should": []
    }
  },
  "size": 0,
  "aggs": {
    "agg_;COUNT_ROWS;5d8b0621690e727ff775d4ed": {
      "terms": {
        "field": "feild1.keyword",
        "size": 10000,
        "shard_size": 100,
        "order": {
          "_term": "asc"
        }
      },
      "aggs": {
        "agg_;COUNT_ROWS;5d8b0621690e727ff775d4ec": {
          "terms": {
            "field": "feild2.keyword",
            "size": 30,
            "shard_size": 100,
            "order": {
              "_term": "asc"
            }
          },
          "aggs": {
            "agg_HouseHold;COUNT_DISTINCT": {
              "cardinality": {
                "field": "feild3.keyword",
                "precision_threshold": 40000
              }
            }
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您正在单个实例上运行查询,共有15个分片,其中5个是主数据库。第一个terms聚合的大小为10,000。这个数字会影响性能。请考虑移至composite-aggregation以便使用分页而不是试图将其挤压到一个巨大的响应。

另外,shard_size对我来说意义不大,因为您仅查询5个分片,并要求10,000个结果-从5个分片中获得100个结果将产生500个结果,这还不够。我将放弃此shard_size参数,或设置较高的值以使其有意义。