Index: solr/core/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java
===================================================================
--- solr/core/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java (revision 1180735)
+++ solr/core/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java (working copy)
@@ -24,9 +24,6 @@
import org.apache.lucene.search.FieldComparatorSource;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.UnicodeUtil;
-import org.apache.lucene.util.packed.Direct16;
-import org.apache.lucene.util.packed.Direct32;
-import org.apache.lucene.util.packed.Direct8;
import org.apache.lucene.util.packed.PackedInts;
import java.io.IOException;
@@ -439,13 +436,14 @@
parent.termsIndex = FieldCache.DEFAULT.getTermsIndex(reader, parent.field);
final PackedInts.Reader docToOrd = parent.termsIndex.getDocToOrd();
PerSegmentComparator perSegComp;
+ final Object arr = docToOrd.getNativeArray();
- if (docToOrd instanceof Direct8) {
- perSegComp = new ByteOrdComparator(((Direct8) docToOrd).getArray(), parent);
- } else if (docToOrd instanceof Direct16) {
- perSegComp = new ShortOrdComparator(((Direct16) docToOrd).getArray(), parent);
- } else if (docToOrd instanceof Direct32) {
- perSegComp = new IntOrdComparator(((Direct32) docToOrd).getArray(), parent);
+ if (arr instanceof byte[]) {
+ perSegComp = new ByteOrdComparator((byte[]) arr, parent);
+ } else if (arr instanceof short[]) {
+ perSegComp = new ShortOrdComparator((short[]) arr, parent);
+ } else if (arr instanceof int[]) {
+ perSegComp = new IntOrdComparator((int[]) arr, parent);
} else {
perSegComp = new AnyOrdComparator(docToOrd, parent);
}
Index: solr/core/src/java/org/apache/solr/request/SimpleFacets.java
===================================================================
--- solr/core/src/java/org/apache/solr/request/SimpleFacets.java (revision 1180735)
+++ solr/core/src/java/org/apache/solr/request/SimpleFacets.java (working copy)
@@ -22,9 +22,6 @@
import org.apache.lucene.search.*;
import org.apache.lucene.search.grouping.AbstractAllGroupHeadsCollector;
import org.apache.lucene.util.*;
-import org.apache.lucene.util.packed.Direct16;
-import org.apache.lucene.util.packed.Direct32;
-import org.apache.lucene.util.packed.Direct8;
import org.apache.lucene.util.packed.PackedInts;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
@@ -450,8 +447,9 @@
DocIterator iter = docs.iterator();
PackedInts.Reader ordReader = si.getDocToOrd();
- if (ordReader instanceof Direct32) {
- int[] ords = ((Direct32)ordReader).getArray();
+ final Object arr = ordReader.getNativeArray();
+ if (arr instanceof int[]) {
+ int[] ords = (int[]) arr;
if (prefix==null) {
while (iter.hasNext()) {
counts[ords[iter.nextDoc()]]++;
@@ -463,8 +461,8 @@
if (arrIdx>=0 && arrIdx
@@ -80,4 +76,9 @@ public void clear() { Arrays.fill(values, 0L); } + + @Override + public long[] getNativeArray() { + return values; + } } Index: lucene/src/java/org/apache/lucene/util/packed/PackedInts.java =================================================================== --- lucene/src/java/org/apache/lucene/util/packed/PackedInts.java (revision 1180859) +++ lucene/src/java/org/apache/lucene/util/packed/PackedInts.java (working copy) @@ -65,6 +65,17 @@ * @return the number of values. */ int size(); + + /** + * Exert: if the bit-width of this reader matches one of + * java's native types, returns the underlying array + * (ie, byte[], short[], int[], long[]); else, returns + * null. Note that when accessing the array you must + * upgrade the type (bitwise AND with all ones), to + * interpret the full value as unsigned. Ie, + * bytes[idx]&0xFF, shorts[idx]&0xFFFF, etc. + */ + Object getNativeArray(); } /** @@ -137,6 +148,10 @@ public long getMaxValue() { // Convenience method return maxValue(bitsPerValue); } + + public Object getNativeArray() { + return null; + } } /** A write-once Writer.