From ff08b2822f762a63bade1aacfe6dd91583128072 Mon Sep 17 00:00:00 2001 From: Sandesh Kumar Date: Tue, 4 Mar 2025 19:38:56 +0530 Subject: [PATCH] fix precompute ordering Signed-off-by: Sandesh Kumar --- .../aggregations/metrics/MaxAggregator.java | 32 ++++++++++--------- .../aggregations/metrics/MinAggregator.java | 30 +++++++++-------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/server/src/main/java/org/opensearch/search/aggregations/metrics/MaxAggregator.java b/server/src/main/java/org/opensearch/search/aggregations/metrics/MaxAggregator.java index 8a2c8a6de923f..6f606408fc5f8 100644 --- a/server/src/main/java/org/opensearch/search/aggregations/metrics/MaxAggregator.java +++ b/server/src/main/java/org/opensearch/search/aggregations/metrics/MaxAggregator.java @@ -109,6 +109,23 @@ protected boolean tryPrecomputeAggregationForLeaf(LeafReaderContext ctx) throws if (valuesSource == null) { return false; } + + if (pointConverter != null) { + Number segMax = findLeafMaxValue(ctx.reader(), pointField, pointConverter); + if (segMax != null) { + /* + * There is no parent aggregator (see {@link AggregatorBase#getPointReaderOrNull} + * so the ordinal for the bucket is always 0. + */ + assert maxes.size() == 1; + double max = maxes.get(0); + max = Math.max(max, segMax.doubleValue()); + maxes.set(0, max); + // the maximum value has been extracted, we don't need to collect hits on this segment. + return true; + } + } + CompositeIndexFieldInfo supportedStarTree = getSupportedStarTree(this.context.getQueryShardContext()); if (supportedStarTree != null) { if (parent != null && subAggregators.length == 0) { @@ -132,21 +149,6 @@ public LeafBucketCollector getLeafCollector(LeafReaderContext ctx, final LeafBuc throw new CollectionTerminatedException(); } } - if (pointConverter != null) { - Number segMax = findLeafMaxValue(ctx.reader(), pointField, pointConverter); - if (segMax != null) { - /* - * There is no parent aggregator (see {@link AggregatorBase#getPointReaderOrNull} - * so the ordinal for the bucket is always 0. - */ - assert maxes.size() == 1; - double max = maxes.get(0); - max = Math.max(max, segMax.doubleValue()); - maxes.set(0, max); - // the maximum value has been extracted, we don't need to collect hits on this segment. - throw new CollectionTerminatedException(); - } - } final BigArrays bigArrays = context.bigArrays(); final SortedNumericDoubleValues allValues = valuesSource.doubleValues(ctx); diff --git a/server/src/main/java/org/opensearch/search/aggregations/metrics/MinAggregator.java b/server/src/main/java/org/opensearch/search/aggregations/metrics/MinAggregator.java index 84dda7928aa90..22749382216dd 100644 --- a/server/src/main/java/org/opensearch/search/aggregations/metrics/MinAggregator.java +++ b/server/src/main/java/org/opensearch/search/aggregations/metrics/MinAggregator.java @@ -109,6 +109,22 @@ protected boolean tryPrecomputeAggregationForLeaf(LeafReaderContext ctx) throws if (valuesSource == null) { return false; } + + if (pointConverter != null) { + Number segMin = findLeafMinValue(ctx.reader(), pointField, pointConverter); + if (segMin != null) { + /* + * There is no parent aggregator (see {@link MinAggregator#getPointReaderOrNull} + * so the ordinal for the bucket is always 0. + */ + double min = mins.get(0); + min = Math.min(min, segMin.doubleValue()); + mins.set(0, min); + // the minimum value has been extracted, we don't need to collect hits on this segment. + return true; + } + } + CompositeIndexFieldInfo supportedStarTree = getSupportedStarTree(this.context.getQueryShardContext()); if (supportedStarTree != null) { if (parent != null && subAggregators.length == 0) { @@ -133,20 +149,6 @@ public LeafBucketCollector getLeafCollector(LeafReaderContext ctx, final LeafBuc throw new CollectionTerminatedException(); } } - if (pointConverter != null) { - Number segMin = findLeafMinValue(ctx.reader(), pointField, pointConverter); - if (segMin != null) { - /* - * There is no parent aggregator (see {@link MinAggregator#getPointReaderOrNull} - * so the ordinal for the bucket is always 0. - */ - double min = mins.get(0); - min = Math.min(min, segMin.doubleValue()); - mins.set(0, min); - // the minimum value has been extracted, we don't need to collect hits on this segment. - throw new CollectionTerminatedException(); - } - } final BigArrays bigArrays = context.bigArrays(); final SortedNumericDoubleValues allValues = valuesSource.doubleValues(ctx);