【问题标题】:Aggregation on a field and return the sum in elasticsearch对字段进行聚合并在弹性搜索中返回总和
【发布时间】:2016-07-22 06:23:01
【问题描述】:

我正在努力寻找在过滤另一个字段后对字段进行聚合的方法。但是,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

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

【问题讨论】:

    标签: elasticsearch dsl querydsl elasticsearch-aggregation


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 聚合正在整个文档集上进行,但我想要具有术语“b”和“d”的所选文档的字段“c”的总和
    • 以上就是这样做的。该查询仅选择字段bd 与各自查询匹配的文档,并且聚合将仅在这些文档上运行。试试看。
    • {"aggs": { "total": { "sum": { "field": "c" } } } .. 也返回与上述查询相同的值.我无法弄清楚这里的过滤。
    • 我不明白你的意思。你能解释一下你是如何执行我上面的查询的,你得到了什么结果以及它与你的期望有何不同?请使用请求的信息更新您的问题,以便我们解决。
    • 编辑了问题。我按原样运行查询,然后得到与上述注释查询相同的结果。我觉得我的查询是所有文档的完整汇总。
    猜你喜欢
    • 2022-01-25
    • 2015-06-06
    • 2020-02-21
    • 2015-08-15
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多