NEST - 如何进行多重嵌套聚合?

NEST - How can i do multiple nested aggregation?

如何进行多重嵌套聚合?

我试过这样的方法:

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))
                  )));

但它 returns Facets2 作为 Facets

的 child

有人可以帮忙吗?

如本示例所示,您拥有的聚合在 NEST 客户端版本 1.7.1 中按预期工作

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; }
}

这会输出以下请求查询

{
  "aggs": {
    "Facets": {
      "nested": {
        "path": "categories"
      },
      "aggs": {
        "categories": {
          "terms": {
            "field": "categories.id"
          }
        }
      }
    },
    "Facets2": {
      "nested": {
        "path": "brand"
      },
      "aggs": {
        "brand": {
          "terms": {
            "field": "brand.id"
          }
        }
      }
    }
  }
}