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) 我会考虑使用基数聚合:
如果你想得到一个列表,这应该给你一个项目列表和它的数量(你可以 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
}
}
由于日期直方图聚合是日期范围聚合的子聚合,因此可以从日期直方图聚合中的每个桶访问它。
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) 我会考虑使用基数聚合:
如果你想得到一个列表,这应该给你一个项目列表和它的数量(你可以 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
}
}
由于日期直方图聚合是日期范围聚合的子聚合,因此可以从日期直方图聚合中的每个桶访问它。