如何使用JEST构建器创建FiltersAggregation查询?

时间:2017-09-09 19:28:39

标签: elasticsearch jest

如何使用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

2 个答案:

答案 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)调用只会使与过滤器匹配的文档落入此过滤器的存储桶中。

希望这可以解决您的问题,除非我误解了您的用例。