2017-02-22 31 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 Sub Aggregation

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

Я хотел бы предложить 2 вещи, которые помогли мне очень.

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 как часть версии Kibana, совместимую с версией Elasticsearch, которую вы используете, поскольку она обновляется в соответствии с изменениями –