ElasticSearch多个子聚合查询仅使用25 MB文档使用1.5G内存

时间:2016-01-29 00:34:07

标签: elasticsearch spring-data-elasticsearch

任何人都可以帮我看看这个查询构建器并帮助我优化它吗?有人也可以告诉我为什么收集模型" 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;

0 个答案:

没有答案