如何使用JEST FiltersAggregation
或类似方法创建AggregationBuilders
查询?我查看了FiltersAggregationIntegrationTest
,但查询部分是由JSON直接定义的,我需要更像AggregationBuilders
的内容(例如,我将其用于标准术语聚合)
FiltersAggregationIntegrationTest
的链接:
https://github.com/searchbox-io/Jest/blob/master/jest/src/test/java/io/searchbox/core/search/aggregation/FiltersAggregationIntegrationTest.java
答案 0 :(得分:0)
我有一种可能性:
FilterAggregationBuilder testFilter = AggregationBuilders.filter("test");
testFilter.filter(FilterBuilders.typeFilter("typeName"));
new SearchSourceBuilder().aggregation(testFilter);
这是按类型过滤,但FilterBuilders也有一个termFilter。
答案 1 :(得分:0)
这是一个可行的解决方案,我已将此问题交叉发布到Jest github问题。
QueryBuilder filterTermsQuery = QueryBuilders.termsQuery("fieldName", "value1", "value2", "value3");
SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.searchSource()
.query(boolQueryBuilder)
.size(0)
.aggregation(
AggregationBuilders
.filter("filterAggName") // returns FilterAggregationBuilder
.filter(filterTermsQuery));
要点是你要创建一个在jest客户端中使用的搜索源构建器,并提供它和聚合(也可以通过在AggregationBuilders
方法上链接子聚合来包括子聚合) 。然后在AggregationBuilders
中定义过滤器类型的聚合。这将返回FilterAggregationBuilder
的新构建器,您可以在其中提供任何QueryBuilder作为过滤器聚合类型。根据文档,.filter(termsQuery)
调用只会使与过滤器匹配的文档落入此过滤器的存储桶中。
希望这可以解决您的问题,除非我误解了您的用例。