任何人都可以帮我看看这个查询构建器并帮助我优化它吗?有人也可以告诉我为什么收集模型" breath_first"并没有对" depth_first"做出改变?此查询将继续达到我的断路器请求限制并导致OOM。索引元数据映射字段仅列出扁平列表,没有嵌套字段。
final FilterBuilder filterBuilder = termFilter("month", getMostRecentMonthToQuery(indexId));
final String revenueScript = getRevenueScript(revenueModifier);
final String sortString = convertTermSortToAggregationSort(sortColumn);
final boolean isAscending = sortOrder.equalsIgnoreCase("asc");
final SubAggCollectionMode aggCollectionMode = SubAggCollectionMode.parse("breadth_first");
final SearchRequestBuilder builder = elasticSearchClient.prepareSearch(indexId)
.setTypes(TYPE_NAME)
.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), filterBuilder))
.addAggregation(AggregationBuilders.terms("carCount")
.field(CAR_RAW)
.size(pageSize)
.order(Terms.Order.aggregation(sortString, isAscending))
.collectMode(aggCollectionMode)
.subAggregation(AggregationBuilders.terms("partProviderCount")
.field(PART_PROVIDER_RAW)
.size(0)
)
.subAggregation(AggregationBuilders.cardinality("partCount")
.field(PART_NUMBER_RAW)
.precisionThreshold(40000)
)
.subAggregation(AggregationBuilders.avg(IGPART_AGG_NAME)
.field(IGPART_TERM_NAME)
)
.subAggregation(AggregationBuilders.avg(CGPART_AGG_NAME)
.field(CGPART_TERM_NAME)
)
.subAggregation(AggregationBuilders.avg(OGPART_AGG_NAME)
.field(OGPART_TERM_NAME)
)
.subAggregation(AggregationBuilders.avg(CPPART_AGG_NAME)
.field(CPPART_TERM_NAME)
)
.subAggregation(AggregationBuilders.sum(IGPART_PRICE_AGG_NAME)
.field(IGPART_TERM_NAME)
.script(revenueScript)
)
.subAggregation(AggregationBuilders.sum(CGPART_PRICE_AGG_NAME)
.field(CGPART_TERM_NAME)
.script(revenueScript)
)
.subAggregation(AggregationBuilders.sum(OGPART_PRICE_AGG_NAME)
.field(OGPART_TERM_NAME)
.script(revenueScript)
)
.subAggregation(AggregationBuilders.sum(CPPART_PRICE_AGG_NAME)
.field(CPPART_TERM_NAME)
.script(revenueScript)
)
);
return builder;