Я пытаюсь сделать агрегацию на документах, которые содержат дату и время процессора и имя сервера. Я хочу найти время процессора avg в последнюю дату. У меня есть следующий запрос, который частично работает, он дает мне время автономной работы, но не в последнюю дату, он просто случайно выбирает дату.
client.prepareSearch("myindex").
setTypes("mytype").
setQuery(
QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.andFilter(FilterBuilders.termFilter("server","x")))).
addAggregation(AggregationBuilders.avg("cpu_agg")
.field("dt_time").field("cpu_time"))
.get()
Пожалуйста, направляйте. Я хочу, чтобы время avg cpu на последней дате сообщило сегодня дату. Я новичок в ElasticSearch. Заранее спасибо.
client.prepareSearch("myindex").
setTypes("mytype").
setQuery(
QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.andFilter(FilterBuilders.termFilter("server","x")))).
addAggregation(AggregationBuilders.avg("cpu_agg")
.field("dt_time").field("cpu_time"))
.get()
посмотрите на часть (где поле сначала установлено на dt_time и заменено на cpu_time), что означает, что агрегация построена для cpu_time,
Если вы хотите получить время процессора в сегодняшнюю дату, тогда одним из способов является фильтр даты использования,
FilterBuilders.andFilter(FilterBuilders.termFilter("server","x"),FilterBuilders.rangeFilter("dt_time").to(to).from(from))))
Для вашей проблемы, от = до = today_date (или последней даты)
поэтому, наконец,
client.prepareSearch("myindex").
setTypes("mytype").
setQuery(
QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.andFilter(FilterBuilders.termFilter("server", "x"), FilterBuilders.rangeFilter("dt_time").to("to").from("from")))).
addAggregation(AggregationBuilders.avg("cpu_agg")
.field("cpu_time"))
.get();