2017-02-22 88 views
3
 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聚集,但在鸟巢.NET库项目,我没有进入项目列表ElasticSearch .NET子聚集

enter image description here

虽然在调试我发现商品列表

enter image description here

回答

2

要获得每个日期范围内桶的日期直方图柱将

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

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

1

我建议两件事对我帮助极大。

1)我想从铬 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

如果你想获得一个名单,这应该给你的项目列表和它的计数(你可以使用/忽略)

+1

Sense插件尽管仍然有用,但在某些查询的可用属性和结构方面已过时。我建议使用Sense/Console作为与您使用的Elasticsearch版本兼容的Kibana版本的一部分,因为它根据更改进行更新 –