NOTE: You are looking at documentation for an older release. For the latest information, see the current release documentation.
Moving Function Aggregation Usageedit
Given an ordered series of data, the Moving Function aggregation will slide a window across the data and allow the user to specify a custom script that is executed on each window of data. For convenience, a number of common functions are predefined such as min/max, moving averages, etc.
This is conceptually very similar to the Moving Average pipeline aggregation, except it provides more functionality.
Only available in Elasticsearch 6.4.0+
Be sure to read the Elasticsearch documentation on Moving Function Aggregation
Fluent DSL exampleedit
a => a .DateHistogram("projects_started_per_month", dh => dh .Field(p => p.StartedOn) .Interval(DateInterval.Month) .Aggregations(aa => aa .Sum("commits", sm => sm .Field(p => p.NumberOfCommits) ) .MovingFunction("commits_moving_avg", mv => mv .BucketsPath("commits") .Window(30) .Script("MovingFunctions.unweightedAvg(values)") ) ) )
Object Initializer syntax exampleedit
new DateHistogramAggregation("projects_started_per_month") { Field = "startedOn", Interval = DateInterval.Month, Aggregations = new SumAggregation("commits", "numberOfCommits") && new MovingFunctionAggregation("commits_moving_avg", "commits") { Window = 30, Script = "MovingFunctions.unweightedAvg(values)" } }
Example json output.
{ "projects_started_per_month": { "date_histogram": { "field": "startedOn", "interval": "month" }, "aggs": { "commits": { "sum": { "field": "numberOfCommits" } }, "commits_moving_avg": { "moving_fn": { "buckets_path": "commits", "window": 30, "script": "MovingFunctions.unweightedAvg(values)" } } } } }
Handling Responsesedit
response.ShouldBeValid(); var projectsPerMonth = response.Aggregations.DateHistogram("projects_started_per_month"); projectsPerMonth.Should().NotBeNull(); projectsPerMonth.Buckets.Should().NotBeNull(); projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0); // average not calculated for the first bucket foreach (var item in projectsPerMonth.Buckets.Skip(1)) { if (item.DocCount == 0) continue; var movingAvg = item.Sum("commits_moving_avg"); movingAvg.Should().NotBeNull(); movingAvg.Value.Should().BeGreaterThan(0); }