elasticsearch每周平均需要一些价值

时间:2019-04-05 15:26:02

标签: elasticsearch

我有简单的数据

sales, date_of_sales

我需要的是每周平均数,即总和(销售)/周数。

请帮助。

我到目前为止是

{
  "size": 0,
  "aggs": {
    "WeekAggergation": {
      "date_histogram": {
        "field": "date_of_sales",
        "interval": "week"
      }
    },
    "TotalSales": {
      "sum": {
        "field": "sales"
      }
    },
    "myValue": {
      "bucket_script": {
        "buckets_path": {
          "myGP": "TotalSales",
          "myCount": "WeekAggergation._bucket_count"
        },
        "script": "params.myGP/params.myCount"
      }
    }
  }
}

我收到错误

Invalid pipeline aggregation named [myValue] of type [bucket_script]. 
Only sibling pipeline aggregations are allowed at the top level.

1 个答案:

答案 0 :(得分:1)

我认为这可能会有所帮助:

{
  "size": 0,
  "aggs": {
    "WeekAggergation": {
      "date_histogram": {
        "field": "date_of_sale",
        "interval": "week",
        "format": "yyyy-MM-dd"
      },
      "aggs": {
        "TotalSales": {
          "sum": {
            "field": "sales"
          }
        },
        "AvgSales": {
          "avg": {
            "field": "sales"
          }
        }
      }
    },
    "avg_all_weekly_sales": {
      "avg_bucket": {
        "buckets_path": "WeekAggergation>TotalSales"
      }
    }
  }
}

请注意,TotalSales聚合现在是每周直方图聚合下的嵌套聚合(我相信所提供的代码中有拼写错误-所提供的简单模式指示了date_of_sale的字段名称和聚合提供的格式使用复数形式date_of_sales)。这将为您提供每周时段中的所有销售总额。

此外,AvgSales在每周直方图汇总下提供了类似的嵌套汇总,因此您可以查看该周所有特定销售的平均值。

最后,管道聚合avg_all_weekly_sales将根据TotalSales存储桶和非空存储桶的数量给出每周的平均销售额-如果要包括空存储桶,请添加{{ 1}}参数,如下所示:

gap_policy

(请参阅:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-avg-bucket-aggregation.html)。

这种管道聚合可能不是您真正想要的,所以请检查数学以确保结果符合预期,但应基于原始脚本提供正确的输出。