我正在尝试对包含日期时间、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()
请指导。我想要最近日期的平均 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构建的,
如果你想获得今天日期的 cpu 时间,那么一种方法是使用日期过滤器,
FilterBuilders.andFilter(FilterBuilders.termFilter("server","x"),FilterBuilders.rangeFilter("dt_time").to(to).from(from))))
对于你的问题,from = to = today_date (or last 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();
关于java - Elasticsearch 聚合查询没有给出预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25105081/