ElasticSearch .NET 子聚合

ElasticSearch .NET Sub Aggregation

     var response = client.Search<Timeline>(
         x => x.Query(
             q => q.Bool(
                 b => b.Must(queryContainer)))
                   .Size(0)
                .Aggregations(a => a
                .DateRange("last_24_hours",
                f => f.Field(n=>n.server_time)
                .Ranges(z=>z.From(DateMath.Now.Subtract("24h")).To(DateMath.Now))
                   .Aggregations(
                    agg => agg.DateHistogram("widget_clicked_by_hour",
                    p => p.Field(z => z.server_time)
                    .Interval(DateInterval.Hour)
                    .Format("yyyy-MM-dd hh:mm")
                    .OrderDescending("_key"))))
                )
              );

我正在尝试从 widget_clicked_by_hour 聚合中获取项目,但在 nest .net 库中我无权访问项目列表

尽管在调试时我找到了项目列表

我会建议 2 件对我帮助很大的事情。

1) 我会从 chrome 安装 sense 插件 https://chrome.google.com/webstore/detail/sense-beta/lhjgkmllcaadmopgmanpapmpjgmfcfig?hl=en

这为您提供了一种非常人性化的方式来直接在浏览器中构建您的 elasticsearch 查询和分析。

2) 我会考虑使用基数聚合:

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html

如果你想得到一个列表,这应该给你一个项目列表和它的数量(你可以 use/ignore)

获取每个日期范围桶的日期直方图桶是

var dateRange = response.Aggs.DateRange("last_24_hours");

foreach (var rangeBucket in dateRange.Buckets)
{
    var dateHistogram = rangeBucket.DateHistogram("widget_clicked_by_hour");

    foreach (var histogramBucket in dateHistogram.Buckets)
    {
        // do something with bucket
    }
}

由于日期直方图聚合是日期范围聚合的子聚合,因此可以从日期直方图聚合中的每个桶访问它。