2017-02-22 79 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版本的一部分,因爲它根據更改進行更新 –