Umesh Kacha
Umesh Kacha

Reputation: 13686

Elasticsearch aggregation query not giving expected output

I am trying to do aggregation on documents which contains datetime and CPU time and server name. I want to find the avg CPU time on latest date. I have the following query which partially works it gives me the avg CPU time but not on latest date it just randomly chooses date.

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()

Please guide. I want avg cpu time on latest date say today's date. I am new to ElasticSearch. Thanks in advance.

Upvotes: 1

Views: 377

Answers (1)

progrrammer
progrrammer

Reputation: 4489

   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()

look at the portion (where field is set to dt_time at first and replaced to cpu_time), which means aggregation is build for cpu_time,

If you want to get cpu time in today's date then one way is use date filter ,

       FilterBuilders.andFilter(FilterBuilders.termFilter("server","x"),FilterBuilders.rangeFilter("dt_time").to(to).from(from))))

For your problem, from = to = today_date (or last date)

so finally,

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();

Upvotes: 3

Related Questions