Skip to content

Commit 20f43bf

Browse files
committed
add hasSingleArrayBackingStorage
allow for optimization only when there really is a single array, and not when there is a multi dimensional one
1 parent bbfd395 commit 20f43bf

File tree

7 files changed

+38
-7
lines changed

7 files changed

+38
-7
lines changed

src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefOrdValComparator.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -387,12 +387,14 @@ public FieldComparator<BytesRef> setNextReader(AtomicReaderContext context) thro
387387
Object ordsStorage = docToOrd.ordinals().getBackingStorage();
388388
FieldComparator<BytesRef> perSegComp = null;
389389

390-
if (ordsStorage instanceof byte[]) {
391-
perSegComp = new ByteOrdComparator((byte[]) ordsStorage, termsIndex, docBase);
392-
} else if (ordsStorage instanceof short[]) {
393-
perSegComp = new ShortOrdComparator((short[]) ordsStorage, termsIndex, docBase);
394-
} else if (ordsStorage instanceof int[]) {
395-
perSegComp = new IntOrdComparator((int[]) ordsStorage, termsIndex, docBase);
390+
if (docToOrd.ordinals().hasSingleArrayBackingStorage()) {
391+
if (ordsStorage instanceof byte[]) {
392+
perSegComp = new ByteOrdComparator((byte[]) ordsStorage, termsIndex, docBase);
393+
} else if (ordsStorage instanceof short[]) {
394+
perSegComp = new ShortOrdComparator((short[]) ordsStorage, termsIndex, docBase);
395+
} else if (ordsStorage instanceof int[]) {
396+
perSegComp = new IntOrdComparator((int[]) ordsStorage, termsIndex, docBase);
397+
}
396398
}
397399
// Don't specialize the long[] case since it's not
398400
// possible, ie, worse case is MAX_INT-1 docs with

src/main/java/org/elasticsearch/index/fielddata/ordinals/DocIdOrdinals.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public DocIdOrdinals(int numDocs) {
3838
this.numDocs = numDocs;
3939
}
4040

41+
@Override
42+
public boolean hasSingleArrayBackingStorage() {
43+
return false;
44+
}
45+
4146
@Override
4247
public Object getBackingStorage() {
4348
return null;

src/main/java/org/elasticsearch/index/fielddata/ordinals/EmptyOrdinals.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ public long getMemorySizeInBytes() {
3636
return 0;
3737
}
3838

39+
@Override
40+
public boolean hasSingleArrayBackingStorage() {
41+
return false;
42+
}
43+
3944
@Override
4045
public Object getBackingStorage() {
4146
return null;

src/main/java/org/elasticsearch/index/fielddata/ordinals/MultiFlatArrayOrdinals.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public MultiFlatArrayOrdinals(int[][] ordinals, int numOrds) {
5050
this.numOrds = numOrds;
5151
}
5252

53+
@Override
54+
public boolean hasSingleArrayBackingStorage() {
55+
return false;
56+
}
57+
5358
@Override
5459
public Object getBackingStorage() {
5560
return ordinals;

src/main/java/org/elasticsearch/index/fielddata/ordinals/Ordinals.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,18 @@
1919

2020
package org.elasticsearch.index.fielddata.ordinals;
2121

22-
import org.elasticsearch.common.RamUsage;
2322
import org.elasticsearch.index.fielddata.util.IntArrayRef;
2423

2524
/**
2625
* A thread safe ordinals abstraction. Ordinals can only be positive integers.
2726
*/
2827
public interface Ordinals {
2928

29+
/**
30+
* Are the ordinals backed by a single ordinals array?
31+
*/
32+
boolean hasSingleArrayBackingStorage();
33+
3034
/**
3135
* Returns the backing storage for this ordinals.
3236
*/

src/main/java/org/elasticsearch/index/fielddata/ordinals/SingleArrayOrdinals.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ public SingleArrayOrdinals(int[] ordinals, int numOrds) {
3737
this.numOrds = numOrds;
3838
}
3939

40+
@Override
41+
public boolean hasSingleArrayBackingStorage() {
42+
return true;
43+
}
44+
4045
@Override
4146
public Object getBackingStorage() {
4247
return ordinals;

src/main/java/org/elasticsearch/index/fielddata/ordinals/SinglePackedOrdinals.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public SinglePackedOrdinals(PackedInts.Reader reader, int numOrds) {
3838
this.numOrds = numOrds;
3939
}
4040

41+
@Override
42+
public boolean hasSingleArrayBackingStorage() {
43+
return reader.hasArray();
44+
}
45+
4146
@Override
4247
public Object getBackingStorage() {
4348
if (reader.hasArray()) {

0 commit comments

Comments
 (0)