ElasticSearch NEST Совокупный запрос SubBucket

Используя Nest, я пытаюсь воспроизвести запрос, созданный Kibana для построения визуализации таблицы данных.

Вот что создал Кибана:

    {
      "size": 0,
      "aggs": {
        "4": {
          "date_histogram": {
            "field": "BeginDate",
            "interval": "1d",
            "time_zone": "America/Phoenix",
            "min_doc_count": 1
          },
          "aggs": {
            "2": {
              "terms": {
                "field": "Application.keyword",
                "size": 5,
                "order": {
                  "_term": "desc"
                }
              },
              "aggs": {
                "3": {
                  "terms": {
                    "field": "Module.keyword",
                    "size": 5,
                    "order": {
                      "_term": "desc"
                    }
                  },
                  "aggs": {
                    "5": {
                      "terms": {
                        "field": "SubModule.keyword",
                        "size": 5,
                        "order": {
                          "_count": "desc"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "version": true,
      "query": {
        "bool": {
          "must": [
            {
              "query_string": {
                "query": "*",
                "analyze_wildcard": true
              }
            },
            {
              "range": {
                "BeginDate": {
                  "gte": 1521671201609,
                  "lte": 1524263201609,
                  "format": "epoch_millis"
                }
              }
            }
          ],
          "must_not": []
        }
      }
    }

Я упустил некоторые детали из того, что создал Кибана, но я не верю, что они меняют ответ.

И вот моя лучшая попытка:

        var events = Es.Client.Search<Event>(s => s
        .Index(Es.AliasName)
        .Size(0)            
            .Aggregations(a1 => a1 
                .DateHistogram("BeginDate", bd => bd
                    .Field(f => f.BeginDate)
                    .Interval(DateInterval.Day)
                    .TimeZone("UTC")
                    .MinimumDocumentCount(1)))
                .Aggregations(a => a
                    .Terms("Application", t => t
                    .Field(f => f.App.Suffix("keyword"))))
                    .Aggregations(a => a
                        .Terms("Module", t => t
                        .Field(f => f.AppModule.Suffix("keyword"))))
                            .Aggregations(a => a
                                .Terms("SubModule", t => t
                                .Field(f => f.AppSubModule.Suffix("keyword"))))
            .Version(true)
            .Query(q => q
               .Bool(b => b
                   .Must(m => m.QueryString(qs => qs
                           .Query("*")
                           .AnalyzeWildcard(true)),
                         m => m.DateRange(
                            r => r.Field("BeginDate")
                            .GreaterThanOrEquals(yesterday2.Date)
                            .LessThanOrEquals(yesterday.Date.AddTicks(-1).AddDays(1)))))));

Я не могу понять, как создавать агрегаты агрегатов. Я просмотрел дочерние агрегаты и вложенные агрегаты, но они, похоже, делают что-то еще. Что мне не хватает?


person Eric Stewart    schedule 20.04.2018    source источник


Ответы (1)


Понятно, мне нужно было построить Агрегации на полях:

        var events = Es.Client.Search<Event>(s => s
        .Index(Es.AliasName)
        .Size(0)            
            .Aggregations(a1 => a1 
                .DateHistogram("BeginDate", bd => bd
                    .Field(f => f.BeginDate)
                        .Aggregations(a2 => a2
                            .Terms("Application", app => app
                            .Field(f => f.App.Suffix("keyword"))
                                .Aggregations(a3 => a3
                                    .Terms("Module", mod => mod
                                    .Field(f => f.AppModule.Suffix("keyword"))
                                        .Aggregations(a4 => a4
                                            .Terms("SubModule", subm => subm
                                            .Field(f => f.AppSubModule.Suffix("keyword"))
person Eric Stewart    schedule 20.04.2018