asticsearch Требуется среднее значение за неделю некоторого значения - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть простые данные как

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 Ответ

1 голос
/ 05 апреля 2019

Я думаю, что это может помочь:

{
  "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 и количества непустых сегментов - если вы хотите включить пустые сегменты, добавьте параметр gap_policy, например:так:

...

"avg_all_weekly_sales": {
      "avg_bucket": {
        "buckets_path": "WeekAggergation>TotalSales",
        "gap_policy": "insert_zeros"
      }
    }

...

(см .: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-avg-bucket-aggregation.html).

Эта конвейерная агрегация может или не может быть тем, что вы на самом деле ищете, поэтому, пожалуйста, проверьте математику, чтобы убедиться, что результатожидается, но должен обеспечить правильный вывод на основе исходного сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...