2015-11-24 2 views
1

У меня следующий документ в ElasticSearch:агрегация Elasticsearch над отметкой времени

"ipAddress": "192.168.10.12", "timestamp": "25 Oct 2015 20:00:00", "switchovers": 2 

"ipAddress": "192.168.10.12", "timestamp": "26 Oct 2015 20:00:00", "switchovers": 1 

Как я могу написать агрегацию elasticsearch, чтобы узнать [сегодня переключений] - Переключения [вчера] сгруппированных по IP-адресу?

Это где я нахожусь: (. Из октавы, например)

{ 
"size": 0, 
"query": { 
    "match_all": {} 
}, 
    "aggs": { 
     "switchover_count_over_time": { 
     "terms": { 
      "field": "ipAddress" 
     }, 
     } 
    } 
}' 

Yet, чтобы выяснить, как извлечь переключения для каждой даты и вычислить разницу от стоимости переключения в предыдущий день ..

Любая помощь?

+0

Вы не сможете вычислить разницу. Вам нужно будет обработать это в своем приложении. –

+0

Не могу ли я использовать [функцию агрегации скриптов] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html) здесь? –

+0

Возможно, вы можете. Но мне лучше справиться с этим в коде приложения, а не в Elastic. Это только мое мнение. –

ответ

1

Вы можете использовать агрегирование гистограммы даты в поле даты/времени. Вот ссылка https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html. Добавьте агрегирование терминов в ipaddress/switchovers внутри агрегации date_histogram.

{ 
    "aggs" : { 
     "date_interval" : { 
      "date_histogram" : { 
       "field" : "date", 
       "interval" : "month" 
      }, "aggs": { 
       "switch_over": { 
       "terms": { 
        "field": "ip/switchovers", 
        "size": 100 
       } 
       } 
      } 
     } 
    } 
} 

Надеюсь, это сработает для вас.

Смежные вопросы