Index: src/java/org/apache/lucene/search/FieldCache.java
===================================================================
--- src/java/org/apache/lucene/search/FieldCache.java	(revision 956092)
+++ src/java/org/apache/lucene/search/FieldCache.java	(working copy)
@@ -24,6 +24,7 @@
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.document.NumericField; // for javadocs
 import org.apache.lucene.analysis.NumericTokenStream; // for javadocs
+import org.apache.lucene.util.packed.PackedInts;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -534,6 +535,9 @@
 
     /** Returns a TermsEnum that can iterate over the values in this index entry */
     public abstract TermsEnum getTermsEnum();
+
+    /** @lucene.internal */
+    public abstract PackedInts.Reader getDocToOrd();
   }
 
   /** Checks the internal cache for an appropriate entry, and if none
Index: src/java/org/apache/lucene/search/FieldCacheImpl.java
===================================================================
--- src/java/org/apache/lucene/search/FieldCacheImpl.java	(revision 956092)
+++ src/java/org/apache/lucene/search/FieldCacheImpl.java	(working copy)
@@ -634,7 +634,7 @@
     }
   }
 
-  private static class DocTermsIndexImpl extends DocTermsIndex {
+  public static class DocTermsIndexImpl extends DocTermsIndex {
     private final PagedBytes.Reader bytes;
     private final PackedInts.Reader termOrdToBytesOffset;
     private final PackedInts.Reader docToTermOrd;
@@ -648,6 +648,11 @@
     }
 
     @Override
+    public PackedInts.Reader getDocToOrd() {
+      return docToTermOrd;
+    }
+
+    @Override
     public int numOrd() {
       return numOrd;
     }
Index: src/java/org/apache/lucene/util/packed/Direct32.java
===================================================================
--- src/java/org/apache/lucene/util/packed/Direct32.java	(revision 956092)
+++ src/java/org/apache/lucene/util/packed/Direct32.java	(working copy)
@@ -25,9 +25,10 @@
 
 /**
  * Direct wrapping of 32 bit values to a backing array of ints.
+ * @lucene.internal
  */
 
-class Direct32 extends PackedInts.ReaderImpl
+public class Direct32 extends PackedInts.ReaderImpl
         implements PackedInts.Mutable {
   private int[] values;
   private static final int BITS_PER_VALUE = 32;
@@ -63,6 +64,10 @@
     this.values = values;
   }
 
+  public int[] getArray() {
+    return values;
+  }
+
   public long get(final int index) {
     return 0xFFFFFFFFL & values[index];
   }
Index: src/java/org/apache/lucene/util/packed/Direct16.java
===================================================================
--- src/java/org/apache/lucene/util/packed/Direct16.java	(revision 956092)
+++ src/java/org/apache/lucene/util/packed/Direct16.java	(working copy)
@@ -25,9 +25,10 @@
 
 /**
  * Direct wrapping of 16 bit values to a backing array of shorts.
+ * @lucene.internal
  */
 
-class Direct16 extends PackedInts.ReaderImpl
+public class Direct16 extends PackedInts.ReaderImpl
         implements PackedInts.Mutable {
   private short[] values;
   private static final int BITS_PER_VALUE = 16;
@@ -67,6 +68,10 @@
     this.values = values;
   }
 
+  public short[] getArray() {
+    return values;
+  }
+
   public long get(final int index) {
     return 0xFFFFL & values[index];
   }
Index: src/java/org/apache/lucene/util/packed/Direct8.java
===================================================================
--- src/java/org/apache/lucene/util/packed/Direct8.java	(revision 956092)
+++ src/java/org/apache/lucene/util/packed/Direct8.java	(working copy)
@@ -25,9 +25,10 @@
 
 /**
  * Direct wrapping of 8 bit values to a backing array of bytes.
+ * @lucene.internal
  */
 
-class Direct8 extends PackedInts.ReaderImpl
+public class Direct8 extends PackedInts.ReaderImpl
         implements PackedInts.Mutable {
   private byte[] values;
   private static final int BITS_PER_VALUE = 8;
@@ -68,6 +69,10 @@
     this.values = values;
   }
 
+  public byte[] getArray() {
+    return values;
+  }
+
   public long get(final int index) {
     return 0xFFL & values[index];
   }
Index: src/java/org/apache/lucene/util/packed/Direct64.java
===================================================================
--- src/java/org/apache/lucene/util/packed/Direct64.java	(revision 956092)
+++ src/java/org/apache/lucene/util/packed/Direct64.java	(working copy)
@@ -25,9 +25,10 @@
 
 /**
  * Direct wrapping of 32 bit values to a backing array of ints.
+ * @lucene.internal
  */
 
-class Direct64 extends PackedInts.ReaderImpl
+public class Direct64 extends PackedInts.ReaderImpl
         implements PackedInts.Mutable {
   private long[] values;
   private static final int BITS_PER_VALUE = 64;
@@ -47,6 +48,9 @@
     this.values = values;
   }
 
+  public long[] getArray() {
+    return values;
+  }
 
   /**
    * Creates an array backed by the given values.
