Optimize Min and Max BKD optimizations (#44315)
MinAggregator - skip BKD optimization when no result found after 1024 lookups. MaxAggregator - skip unnecessary conversions.
This commit is contained in:
parent
3839840b0c
commit
245c9b7914
|
@ -22,9 +22,9 @@ import org.apache.lucene.index.LeafReader;
|
|||
import org.apache.lucene.index.LeafReaderContext;
|
||||
import org.apache.lucene.index.PointValues;
|
||||
import org.apache.lucene.search.CollectionTerminatedException;
|
||||
import org.apache.lucene.search.ScoreMode;
|
||||
import org.apache.lucene.util.Bits;
|
||||
import org.apache.lucene.util.FutureArrays;
|
||||
import org.apache.lucene.search.ScoreMode;
|
||||
import org.elasticsearch.common.lease.Releasables;
|
||||
import org.elasticsearch.common.util.BigArrays;
|
||||
import org.elasticsearch.common.util.DoubleArray;
|
||||
|
@ -174,7 +174,7 @@ class MaxAggregator extends NumericMetricsAggregator.SingleValue {
|
|||
}
|
||||
int numBytes = pointValues.getBytesPerDimension();
|
||||
final byte[] maxValue = pointValues.getMaxPackedValue();
|
||||
final Number[] result = new Number[1];
|
||||
final byte[][] result = new byte[1][];
|
||||
pointValues.intersect(new PointValues.IntersectVisitor() {
|
||||
@Override
|
||||
public void visit(int docID) {
|
||||
|
@ -186,7 +186,10 @@ class MaxAggregator extends NumericMetricsAggregator.SingleValue {
|
|||
if (liveDocs.get(docID)) {
|
||||
// we need to collect all values in this leaf (the sort is ascending) where
|
||||
// the last live doc is guaranteed to contain the max value for the segment.
|
||||
result[0] = converter.apply(packedValue);
|
||||
if (result[0] == null) {
|
||||
result[0] = new byte[packedValue.length];
|
||||
}
|
||||
System.arraycopy(packedValue, 0, result[0], 0, packedValue.length);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -200,6 +203,6 @@ class MaxAggregator extends NumericMetricsAggregator.SingleValue {
|
|||
}
|
||||
}
|
||||
});
|
||||
return result[0];
|
||||
return result[0] != null ? converter.apply(result[0]) : null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ import java.util.Map;
|
|||
import java.util.function.Function;
|
||||
|
||||
class MinAggregator extends NumericMetricsAggregator.SingleValue {
|
||||
private static final int MAX_BKD_LOOKUPS = 1024;
|
||||
|
||||
final ValuesSource.Numeric valuesSource;
|
||||
final DocValueFormat format;
|
||||
|
@ -212,6 +213,8 @@ class MinAggregator extends NumericMetricsAggregator.SingleValue {
|
|||
final Number[] result = new Number[1];
|
||||
try {
|
||||
pointValues.intersect(new PointValues.IntersectVisitor() {
|
||||
private short lookupCounter = 0;
|
||||
|
||||
@Override
|
||||
public void visit(int docID) {
|
||||
throw new UnsupportedOperationException();
|
||||
|
@ -224,6 +227,9 @@ class MinAggregator extends NumericMetricsAggregator.SingleValue {
|
|||
// this is the first leaf with a live doc so the value is the minimum for this segment.
|
||||
throw new CollectionTerminatedException();
|
||||
}
|
||||
if (++lookupCounter > MAX_BKD_LOOKUPS) {
|
||||
throw new CollectionTerminatedException();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue