You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用ElasticSearch复合聚合查询报错及请求体排查

Elasticsearch复合聚合查询解析异常排查

错误现象

执行复合聚合查询时先后出现两个解析异常:

  1. 初始请求报错:
elasticsearch.BadRequestError: BadRequestError(400, 'parsing_exception', 'Expected [START_OBJECT] under [size], but got a [VALUE_NUMBER] in [composite]')
  1. 调整size字段位置后报错:
elasticsearch.BadRequestError: BadRequestError(400, 'parsing_exception', 'Expected [START_OBJECT] under [sources], but got a [START_ARRAY] in [composite]')

错误原因

复合聚合的语法结构错误:将聚合类型composite直接作为聚合名称使用,导致Elasticsearch无法正确识别聚合类型,进而解析size和sources字段时出现类型不匹配错误。

正确的复合聚合结构要求:

  • 自定义一个聚合名称(如process_stats_composite)作为aggs的键
  • 该键对应的对象中,用composite指定聚合类型,内部再定义size(数值类型)和sources(数组类型)

修正后的查询请求体

{
  "query": {
    "bool": {
      "must": [
        {"range": {"@timestamp": {"gte": "2024-01-01T00:00:00.000Z", "lte": "2024-01-15T23:59:59.999Z"}}}
      ],
      "filter": [
        {"terms": {"hostip": ["xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx"]}},
        {"terms": {"processname": ["a.exe", "b.exe", "c.exe"]}}
      ],
      "must_not": []
    }
  },
  "aggs": {
    "process_stats_composite": { // 自定义聚合名称
      "composite": { // 指定聚合类型为composite
        "size": 1000,
        "sources": [
          {"date_histogram": {"field": "@timestamp",  "calendar_interval": "minute"}},
          {"processname": {"terms": {"field": "processname"}}},
          {"username": {"terms": {"field": "username"}}},
          {"hostip": {"terms": {"field": "hostip"}}},
          {"tagging": {"terms": {"field": "tagging"}}}
        ]
      }
    }
  },
  "size": 0
}

说明

  • 聚合名称可以根据业务需求自定义,只要符合Elasticsearch的命名规则即可
  • composite作为聚合类型,必须包含sources(定义复合维度的数组)和可选的size(控制单次返回的聚合桶数量)字段

内容的提问来源于stack exchange,提问作者user2433759

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:59:57