我通过Java API在ElasticSearch中使用DateHistogram聚合,但是,即使我添加了带有指定的从 - 到时间帧的postFilter,查询也会在索引中的所有文档上返回数据直方图。
我使用的代码:
// note: search is the SearchResponse object
private RangeFilterBuilder getDateRangeFilter(DateTime dateFrom, DateTime dateTo){
return FilterBuilders.rangeFilter("@timestamp").from(dateFrom.getMillis()).to(dateTo.getMillis());
}
// In search method
search.setPostFilter(getDateRangeFilter(dateFrom, dateTo));
而且,聚合:
search.addAggregation(AggregationBuilders
.dateHistogram("histogram")
.field("@timestamp")
.interval(DateHistogram.Interval.DAY));
DataRangeFilter适用于匹配和其他聚合;相反,它不仅适用于dateHistogram聚合。如何过滤dateHistogram的时间范围?
答案 0 :(得分:1)
问题是您正在使用PostFilter - 聚合对查询返回的结果起作用,PostFilter发生得太晚。
要使您的过滤器正常工作,请使用过滤后的查询(这可能是您想要的过滤器)或将过滤器作为汇总的一部分。
filtering queries and aggregations上的此页面包含您需要的所有内容。