NEST - How can i do multiple nested aggregation?

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

 

时间: 2024-10-13 01:00:22

NEST - How can i do multiple nested aggregation?的相关文章

Elasticsearch之Nested Aggregation

(这是一个小系列:请戳:Elasticsearch之Nested(嵌套)系列,查看其他nested相关文章) In the same way as we need to use the special nested query to gain access to nested objects at search time, the dedicated nested aggregation allows us to aggregate fields in nested objects: 与在检索时

aggregation 详解3(bucket aggregation)

概述 桶分聚合不进行权值的计算,他们对文档根据聚合请求中提供的判断条件(比如:{"from":0,  "to":100})来进行分组(桶分). 桶分聚合还会额外返回每一个桶内文档的个数. 桶分聚合可以包含子聚合——sub-aggregations(权值聚合不能包含子聚合),子聚合将会应用到由父(parent)聚合产生的每一个桶上. 桶分聚合根据聚合条件,可以只定义输出一个桶:也可以输出多个:还可以在根据聚合条件动态确定桶个数(比如:terms aggregation

Elasticsearch之Nested(嵌套)系列

工作需要,专门花了一下午研究了Elasticsearch里面的nested.最好的材料还是官网上面的Elasticsearch: The Definitive Guide, 所以直接将里面涉及到nested的文章找来看了看,顺便把它们翻译了,贴出来和大家分享.同时综合考虑了一下,把英语大体的 英文原文也一起贴出来了.希望这样能够适应不同读者的口味. 文章都顺手翻译了,每天贴出来一篇吧. 1.Elasticsearch之Nested Object 2.Elasticsearch之Nested Ob

Elastic search中使用nested类型的内嵌对象

在大数据的应用环境中,往往使用反范式设计来提高读写性能. 假设我们有个类似简书的系统,系统里有文章,用户也可以对文章进行赞赏.在关系型数据库中,如果按照数据库范式设计,需要两张表:一张文章表和一张赞赏历史记录表,赞赏历史记录表包括了赞赏者姓名和赞赏金额. 在Elastic search中,由于都是json格式存储,则可以在一个index存储系统中的文章及其赞赏记录,这种情况下需要在elastic search中使用nested类型的内嵌对象.因为如果使用数组或者object对象的话,赞赏者姓名和

Elasticsearch: nested对象

在处理大量数据时,关系数据库存在很多问题. 无论是速度,高效处理,有效并行化,可扩展性还是成本,当数据量开始增长时,关系数据库都会失败.该关系数据库的另一个挑战是必须预先定义关系和模式.Elasticsearch也是一个NoSQL文档数据存储. 但是,尽管是一个NoSQL数据存储,Elasticsearch在一定程度上提供了很多帮助来管理关系数据. 它支持类似SQL的连接,并且在嵌套和相关的数据实体上工作得非常棒. 比如,对于一个像下面的blog形式的文档: 一个blog可能对应于很多的comm

Struts1 标签库 说明

Struts提供了五个标签库,即:HTML.Bean.Logic.Template和Nested. HTML标签 : 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单 Bean标签:  在访问JavaBeans 及其属性,以及定义一个新的bean 时使用 Logic标签: 管理条件产生的输出和对象集产生的循环 Template标签:随着Tiles框架包的出现,此标记已开始减少使用 Nested标签:  增强对其他的Struts 标签的嵌套使用的能力 标签的公共特

Struts1 标签库

Struts提供了五个标签库,即:HTML.Bean.Logic.Template和Nested. HTML标签 : 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单 Bean标签:  在访问JavaBeans 及其属性,以及定义一个新的bean 时使用 Logic标签: 管理条件产生的输出和对象集产生的循环 Template标签:随着Tiles框架包的出现,此标记已开始减少使用 Nested标签:  增强对其他的Struts 标签的嵌套使用的能力 标签的公共特

SVG在网页中的四种使用方式

1,直接打开simple.svg <svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"> <circle cx="100" cy="100" r="90" fill="#39F" /> <circle cx="70" cy="80&q

A Fast, Simple, Typed ORM for .NET

Join the ServiceStack Google+ group or follow @servicestack for updates. A Fast, Simple, Typed ORM for .NET OrmLite's goal is to provide a convenient, DRY, config-free, RDBMS-agnostic typed wrapper that retains a high affinity with SQL, exposing intu