繁体   English   中英

使用Java API的ElasticSearch日期范围查询聚合

[英]ElasticSearch date range query aggregation using Java API

嗨,我有供cpu使用的文档,其中有date_time字段。 现在,我想查找日期范围内的avg cpu用法。 我想出了以下解决方案。 如果我是Elastic Search的新手,请告诉我是否有任何先进或更好的方法。

client.prepareSearch("myindex").
       setTypes("mytype").
       setQuery(
           QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
           FilterBuilders.andFilter(FilterBuilders.termFilter("server","x"),
           FilterBuilders.rangeFilter(date_time).from(fdate).to(tdate)))).get()

现在,上面的查询返回我期望的文档,该文档在/日期范围内。 现在,我要做的是使用SearchHits从这些文档中找到所有唯一的日期,并将此日期的唯一组合存储在HashSet ,现在对于此HashSet所有项目,我执行以下查询

client.prepareSearch("myindex").
       setTypes("mytype").
       setQuery(
           QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
           FilterBuilders.andFilter(FilterBuilders.termFilter("server","x"),
           FilterBuilders.termFilter(date_time),"dateinputfromloop"))).
       addAggregation(AggregationBuilders.avg("cpu_agg").field("cpu_time"))
       .get()

现在上面的查询工作正常,并给出了每个日期时间组合的平均CPU输出。 我想知道是否有更好的方法,因为我在循环中针对所有日期组合执行上述查询。 请提前指导谢谢。

因此,我认为您可以每天获取数据,可以为此使用date_histogram聚合。 因此,您的两个请求可以在单个请求中完成。

这是代码,

client.prepareSearch("myindex").
                setTypes("mytype").
                setQuery(
                        QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
                                FilterBuilders.andFilter(FilterBuilders.termFilter("server","x"),
                                        FilterBuilders.rangeFilter("date_time").from("fdate").to("tdate")))).
                addAggregation(
                        AggregationBuilders.dateHistogram("dateagg").field("date_time").interval(DateHistogram.Interval.DAY)
                                .subAggregation(
                                AggregationBuilders.avg("cpu_agg").field("cpu_time")
                        )
                )
                .get();

您可以更改dateHistogram聚合中的间隔以适合您的需求。

如果要基于唯一性(也以毫秒为单位),则可以将术语聚合用于日期而不是日期直方图聚合。

术语汇总

基于多桶值源的聚合,其中动态构建桶-每个唯一值一个。

希望对您有所帮助,谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM