字段上的聚合和 return elasticsearch 中的总和

Aggregation on a field and return the sum in elasticsearch

我正在努力寻找在过滤另一个字段后对一个字段进行聚合的方法。但是,Elastic 搜索文档并不容易理解。

假设我的映射:

[
  {
     a:'a1'
     b:'b1'
     c:120
     d:12
   },
  {
     a:'a2'
     b:'b1'
     c:170
     d:15
   }
  {
     a:'a3'
     b:'b2'
     c:128
     d:18
   }
  {
     a:'a4'
     b:'b1'
     c:158
     d:5
   }
] 

所需聚合:

Return the sum of field "c", by selecting the docs with "b" where b=b1 and d is less than 13

这不是我的要求,但答案有助于我理解文档。

试试这个:

POST index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "b": "b1"
          }
        },
        {
          "range": {
            "d": {
              "lt": 13
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "total": {
      "sum": {
        "field": "c"
      }
    }
  }
}