gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 10:13:33 25 4
gpt4 key购买 nike

您好,我有一份关于 cpu 使用情况的文档,其中包含 date_time 字段。现在我想查找日期范围内的平均 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 聚合中的间隔以满足您的需要。

如果你想基于唯一性(也以毫秒为单位),那么你可以对日期使用术语聚合而不是日期直方图聚合。

Terms Aggregation

A multi-bucket value source based aggregation where buckets are dynamically built - one per unique value.

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

关于java - 使用 Java API 的 ElasticSearch 日期范围查询聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25229315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com