A newer version is available. For the latest information, see the
current release documentation.
Moving Percentiles Aggregation Usageedit
Given an ordered series of percentiles, the Moving Percentile aggregation will slide a window across those percentiles and allow the user to compute the cumulative percentile.
This is conceptually very similar to the Moving Function pipeline aggregation, except it works on the percentiles sketches instead of the actual buckets values.
Available in Elasticsearch 7.9.0+ with at least basic license level
Fluent DSL exampleedit
a => a .DateHistogram("projects_started_per_month", dh => dh .Field(p => p.StartedOn) .CalendarInterval(DateInterval.Month) .MinimumDocumentCount(0) .Aggregations(aa => aa .Percentiles("percentiles", sm => sm .Field(p => p.NumberOfCommits) ) .MovingPercentiles("moving_percentiles", mv => mv .BucketsPath("percentiles") .Window(10) ) ) )
Object Initializer syntax exampleedit
new DateHistogramAggregation("projects_started_per_month") { Field = "startedOn", CalendarInterval = DateInterval.Month, MinimumDocumentCount = 0, Aggregations = new PercentilesAggregation("percentiles", "numberOfCommits") && new MovingPercentilesAggregation("moving_percentiles", "percentiles") { Window = 10 } }
Example json output.
{ "projects_started_per_month": { "date_histogram": { "field": "startedOn", "calendar_interval": "month", "min_doc_count": 0 }, "aggs": { "percentiles": { "percentiles": { "field": "numberOfCommits" } }, "moving_percentiles": { "moving_percentiles": { "buckets_path": "percentiles", "window": 10 } } } } }
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); // percentiles not calculated for the first bucket foreach (var item in projectsPerMonth.Buckets.Skip(1)) { var movingPercentiles = item.MovingPercentiles("moving_percentiles"); movingPercentiles.Should().NotBeNull(); movingPercentiles.Items.Should().NotBeNull(); }