NEST - How can i do multiple nested aggregation?
阿新 • • 發佈:2017-08-23
child cte nes can pub code one something rst
question:
How can I do multiple nested aggregation?
I have tried something like this:
Aggregations(x => x .Nested("Facets", y => y.Path("categories") .Aggregations(r => r.Terms("categories", w => w.Field(q => q.Categories.FirstOrDefault().Id)) )).Nested("Facets2", s => s.Path("brand") .Aggregations(e => e.Terms("brand", w => w.Field(q => q.Brand.Id)) )));
But it returns Facets2
as a child of Facets
Can anyone help?
Answer:
The aggregations that you have work as expected with NEST client version 1.7.1 as demonstrated with this example
void Main() { var settings = new ConnectionSettings(); var connection = new InMemoryConnection(settings); var client = new ElasticClient(connection : connection); var response = client.Search<Example>(s => s .Aggregations(aggs => aggs .Nested("Facets", nested => nested .Path(p => p.Categories) .Aggregations(r => r .Terms("categories", w => w .Field(q => q.Categories.FirstOrDefault().Id) ) ) ) .Nested("Facets2", nested => nested .Path(p => p.Brand) .Aggregations(e => e .Terms("brand", w => w .Field(q => q.Brand.Id) ) ) ) ) ); Console.WriteLine(Encoding.UTF8.GetString(response.RequestInformation.Request)); } public class Example { public IList<Category> Categories { get; set; } public Brand Brand { get; set; } } public class Brand { public int Id { get; set; } } public class Category { public int Id { get; set; } }
This outputs the following request query
{ "aggs": { "Facets": { "nested": { "path": "categories" }, "aggs": { "categories": { "terms": { "field": "categories.id" } } } }, "Facets2": { "nested": { "path": "brand" }, "aggs": { "brand": { "terms": { "field": "brand.id" } } } } } }
NEST - How can i do multiple nested aggregation?