This documentation contains work-in-progress information for future Elastic Stack and Cloud releases. Use the version selector to view supported release docs. It also contains some Elastic Cloud serverless information. Check out our serverless docs for more details.
Aggregation examples
editAggregation examples
editThis page demonstrates how to use aggregations.
Top-level aggreggation
editFluent API
editvar response = await client .SearchAsync<Person>(search => search .Index("persons") .Query(query => query .MatchAll(_ => {}) ) .Aggregations(aggregations => aggregations .Add("agg_name", aggregation => aggregation .Max(max => max .Field(x => x.Age) ) ) ) .Size(10) );
Object initializer API
editvar response = await client.SearchAsync<Person>(new SearchRequest("persons") { Query = Query.MatchAll(new MatchAllQuery()), Aggregations = new Dictionary<string, Aggregation> { { "agg_name", Aggregation.Max(new MaxAggregation { Field = Infer.Field<Person>(x => x.Age) })} }, Size = 10 });
Consume the response
editvar max = response.Aggregations!.GetMax("agg_name")!; Console.WriteLine(max.Value);
Sub-aggregation
editFluent API
editvar response = await client .SearchAsync<Person>(search => search .Index("persons") .Query(query => query .MatchAll(_ => {}) ) .Aggregations(aggregations => aggregations .Add("firstnames", aggregation => aggregation .Terms(terms => terms .Field(x => x.FirstName) ) .Aggregations(aggregations => aggregations .Add("avg_age", aggregation => aggregation .Max(avg => avg .Field(x => x.Age) ) ) ) ) ) .Size(10) );
Object initializer API
editvar topLevelAggregation = Aggregation.Terms(new TermsAggregation { Field = Infer.Field<Person>(x => x.FirstName) }); topLevelAggregation.Aggregations = new Dictionary<string, Aggregation> { { "avg_age", new MaxAggregation { Field = Infer.Field<Person>(x => x.Age) }} }; var response = await client.SearchAsync<Person>(new SearchRequest("persons") { Query = Query.MatchAll(new MatchAllQuery()), Aggregations = new Dictionary<string, Aggregation> { { "firstnames", topLevelAggregation} }, Size = 10 });
Consume the response
editvar firstnames = response.Aggregations!.GetStringTerms("firstnames")!; foreach (var bucket in firstnames.Buckets) { var avg = bucket.Aggregations.GetAverage("avg_age")!; Console.WriteLine($"The average age for persons named '{bucket.Key}' is {avg}"); }