在ElasticSearch Java API中过滤dateHistogram时间范围

时间:2014-12-19 16:51:29

标签: java elasticsearch

我通过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的时间范围?

1 个答案:

答案 0 :(得分:1)

问题是您正在使用PostFilter - 聚合对查询返回的结果起作用,PostFilter发生得太晚。

要使您的过滤器正常工作,请使用过滤后的查询(这可能是您想要的过滤器)或将过滤器作为汇总的一部分。

filtering queries and aggregations上的此页面包含您需要的所有内容。