2016-04-22 127 views
1

我试图在term上执行聚合,然后在结果测试上执行子聚合以筛选日期范围内的结果。但是子聚合过滤器对搜索响应没有影响。搜索响应始终返回所有文档,但未应用filterElasticsearch subaggregation按预期工作

例如:

TermsBuilder aggregationBuilders = AggregationBuilders.terms("form.id").field("form.id").size(0); 
     aggregationBuilders.subAggregation(AggregationBuilders.filter("indexDate").filter(QueryBuilders.rangeQuery("indexDate").lte(date))); 

回答

1

您需要使用filter聚集周围的其他方法,即作为顶级聚集,然后你添加terms聚集的子聚集。

TermsBuilder formBuckets = AggregationBuilders.terms("form.id") 
    .field("form.id") 
    .size(0); 

FilterBuilder dateFilter = AggregationBuilders.filter("indexDate") 
    .filter(QueryBuilders.rangeQuery("indexDate").lte(date)) 
    .subAggregation(formBuckets); 

我看到你other question,你已经以某种方式通过indexDate移动过滤器来查询部分“解决”这个问题。这也适用于你的情况。

+0

感谢您的回复。是的,我通过做一个bool查询和范围查询来解决过滤问题。现在筛选工作和form.id上的聚合也可以,但不知何故顶级点击并不按预期工作。你能回顾一下![链接](http://stackoverflow.com/questions/36805072/elasticsearch-top-hits-aggregation-java-api-query) –