Elasticsearch聚合查询未提供预期输出

时间:2014-08-03 13:23:41

标签: java elasticsearch

我正在尝试对包含日期时间和CPU时间以及服务器名称的文档进行聚合。我想在最近的日期找到平均CPU时间。我有以下查询部分工作它给我平均CPU时间,但没有在最新日期它只是随机选择日期。

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的新手。提前谢谢。

1 个答案:

答案 0 :(得分:3)

   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构建聚合,

如果你想在今天的日期获得cpu时间,那么一种方法是使用日期过滤器,

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