【发布时间】:2014-08-10 13:57:43
【问题描述】:
您好,我有一个 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。我想知道这些是否是更好的方法,因为我在循环中对所有日期组合执行上述查询。请先指导谢谢。
【问题讨论】:
-
那么,您的日期是如何存储的?我的意思是它是 mm/dd/yy 还是时间,你如何找到日期是否唯一?
-
您好,感谢您的回复。日期以 ISO 日期格式存储。每个文档可能有相似/重复的日期,所以我存储在 HashSet 中,然后一旦我有唯一的日期组合,我就会触发查询以获取每个日期的平均 cpu。
标签: java elasticsearch