diff --git a/docs/Aggregation/Pipeline/Derrivative.md b/docs/Aggregation/Pipeline/Derrivative.md new file mode 100644 index 0000000000000000000000000000000000000000..aebaaf2f9ec9c9091e6b0857f24526f9034f6211 --- /dev/null +++ b/docs/Aggregation/Pipeline/Derrivative.md @@ -0,0 +1,105 @@ +# Derivative Aggregation + +> More info about derivative aggregation is in the [official elasticsearch docs][1] + +A parent pipeline aggregation which calculates the derivative of a specified metric in a parent +histogram (or date_histogram) aggregation. The specified metric must be numeric and the enclosing +histogram must have min_doc_count set to 0 (default for histogram aggregations). + +## Simple example + +```JSON +{ + "aggs" : { + "sales_per_month" : { + "date_histogram" : { + "field" : "date", + "interval" : "month" + }, + "aggs": { + "sales": { + "sum": { + "field": "price" + } + }, + "sales_deriv": { + "derivative": { + "buckets_path": "sales" + } + } + } + } + } +} +``` + +And now the query via DSL: + +```php +$dateAggregation = new DateHistogramAggregation('sales_per_month', 'date', 'month'); +$sumAggregation = new SumAggregation('sales', 'price'); +$derivativeAggregation = new DerivativeAggregation('sales_deriv', 'sales'); +$dateAggregation->addAggregation($sumAggregation); +$dateAggregation->addAggregation($derivativeAggregation); + +$search = new Search(); +$search->addAggregation($dateAggregation); + +$queryArray = $search->toArray(); +``` + +## Second order derivative + +Somewhat more complex would be an example of a second order derivatives. This functionality +is presented in the folowing example: + +```json +{ + "aggs" : { + "sales_per_month" : { + "date_histogram" : { + "field" : "date", + "interval" : "month" + }, + "aggs": { + "sales": { + "sum": { + "field": "price" + } + }, + "sales_deriv": { + "derivative": { + "buckets_path": "sales" + } + }, + "sales_2nd_deriv": { + "derivative": { + "buckets_path": "sales_deriv" + } + } + } + } + } +} +``` + +And now via DSL: + +```php +$dateAggregation = new DateHistogramAggregation('sales_per_month', 'date', 'month'); +$sumAggregation = new SumAggregation('sales', 'price'); +$firstDerivativeAggregation = new DerivativeAggregation('sales_deriv', 'sales'); +$secondDerivativeAggregation = new DerivativeAggregation('sales_2nd_deriv', 'sales_deriv'); + +$dateAggregation->addAggregation($sumAggregation); +$dateAggregation->addAggregation($firstDerivativeAggregation); +$dateAggregation->addAggregation($secondDerivativeAggregation); + +$search = new Search(); +$search->addAggregation($dateAggregation); + +$queryArray = $search->toArray(); + +``` + +[1]: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-derivative-aggregation.html