其他聚合结果的 elasticsearch min 和 max aggs

标签 elasticsearch

我试图在 elasticsearch 中找到聚合结果的最小值和最大值。什么查询将允许它首先按字段聚合,然后执行每月子聚合以获取该字段的每月数据,然后在这些每月计算的指标中找到最小值和最大值。 我一直在寻找 minmax。下面的其余要求是我的查询

问题可以表述为:任何国家/地区的最大和最小交易量(考虑所有月份)是多少? 这是我试过的查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "Id": "7466swy7893jgs225"
          }
        }
      ]
    }
  },
  "aggs": {
    "dimension": {
      "terms": {
        "field": "country"
      },
      "aggs": {
        "MoM": {
          "date_histogram": {
            "field": "date",
            "interval": "month",
            "format": "MMM YY"
          },
          "aggs": {
            "totalValue": {
              "sum": {
                "field": "Transactions"
              }
            }
          }
        }
      }
    }
  },
  "size": 0

这是我得到的输出:

   {
    "aggregations": {
    "dimension": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 0,
    "buckets": [
    {
        "key": "USA",
        "doc_count": 392,
        "MoM": {
            "buckets": [
            {
            "key_as_string": "jan 16",
            "key": 1462060800000,
            "doc_count": 31,
            "totalValue": { "value": 352 }
            },
            {
            "key_as_string": "Feb 16",
            "key": 1462060800000,
            "doc_count": 31,
            "totalValue": { "value": 429 }
            }
         ??????????????/MIN and MAX of 352 AND 429
          ]
        }
    },
    {
        "key": "Bhutan",
        "doc_count": 392,
        "MoM": {
            "buckets": [
            {
            "key_as_string": "Jan 16",
            "key": 1462060800000,
            "doc_count": 31,
            "totalValue": {"value": 750 }
            }
            ,
            {
            "key_as_string": "Feb 16",
            "key": 1464739200000,
            "doc_count": 30,
            "totalValue": {"value": 827 }
        }
          ??????????????/MIN and MAX of 750 AND 827

      ]
     }
  }
 ]
 }
 }}

最佳答案

您需要使用 Pipeline Aggregation. .尝试 Max BucketMin Bucket 聚合

{
"size": 0,
"aggs": {
  "dimension": {
     "terms": {
        "field": "country"
     },
     "aggs": {
        "MoM": {
           "date_histogram": {
              "field": "date",
              "interval": "month",
              "format": "MMM YY"
           },
           "aggs": {
              "totalValue": {
                 "sum": {
                    "field": "transactions"
                 }
              }
           }
        },
        "max_monthly_temp": {
           "max_bucket": {
              "buckets_path": "MoM>totalValue"
           }
        },
        "min_monthly_temp": {
           "min_bucket": {
              "buckets_path": "MoM>totalValue"
              }
            }
         }
      }
   }
 }

输出会有点像:

 "buckets": [
        {
           "key": "India",
           "doc_count": 5,
           "MoM": {
              "buckets": [
                 {
                    "key_as_string": "Feb 17",
                    "key": 1485907200000,
                    "doc_count": 3,
                    "totalValue": {
                       "value": 260
                    }
                 },
                 {
                    "key_as_string": "Mar 17",
                    "key": 1488326400000,
                    "doc_count": 1,
                    "totalValue": {
                       "value": 115
                    }
                 },
                 {
                    "key_as_string": "Apr 17",
                    "key": 1491004800000,
                    "doc_count": 1,
                    "totalValue": {
                       "value": 5
                    }
                 }
              ]
           },
           "max_monthly_temp": {
              "value": 260,
              "keys": [
                 "Feb 17"
              ]
           },
           "min_monthly_temp": {
              "value": 5,
              "keys": [
                 "Apr 17"
              ]
           }
        },
    ......
      ]

希望这有帮助..

关于其他聚合结果的 elasticsearch min 和 max aggs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44238208/

相关文章:

react-native - ReactiveSearch如何在加载时停止初始查询

linux - 无法在 shell 提示符下复制多行 curl 命令

elasticsearch - Elastic Search 嵌套多匹配查询

python - Python3中Elasticsearch .search对象返回错误

elasticsearch - Elasticsearch,应用标准分析器后如何执行精确匹配?

laravel - 如何使用 Laravel Scout 和 ElasticSearch 设置提升和过滤器?

elasticsearch - 在Kubernetes上进行Elasticsearch-最佳实践

elasticsearch - 如何在 Kibana 发现页面中添加时间范围过滤器?

elasticsearch - 正文未在fireFox RESTClient中发送

elasticsearch - Elasticsearch 存储:如何获取_source下的字段名称列表?