You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2016/09/21 13:42:14 UTC

[10/16] lucene-solr:master: LUCENE-7407: switch doc values usage to an iterator API, based on DocIdSetIterator, instead of random acces, freeing codecs for future improvements

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java b/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java
index 0dc654c..7901214 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java
@@ -23,7 +23,9 @@ import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -32,10 +34,11 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.regex.Pattern;
 
-import org.apache.lucene.document.LongPoint;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
+import org.apache.lucene.document.LongPoint;
 import org.apache.lucene.document.NumericDocValuesField;
+import org.apache.lucene.search.FieldDoc;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.ScoreDoc;
@@ -722,9 +725,10 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
           assertNotNull("oldSchemaGen=" + oldSchemaGen, oldValues);
           for(int i=0;i<maxDoc;i++) {
             // TODO: is this still O(blockSize^2)?
+            assertEquals(i, oldValues.nextDoc());
             Document oldDoc = reader.document(i);
             Document newDoc = new Document();
-            newDoc.add(new NumericDocValuesField("number_" + newSchemaGen, oldValues.get(i)));
+            newDoc.add(new NumericDocValuesField("number_" + newSchemaGen, oldValues.longValue()));
             w.addDocument(newDoc);
           }
         }
@@ -752,11 +756,12 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
         for(int i=0;i<maxDoc;i++) {
           Document oldDoc = r.document(i);
           long value = Long.parseLong(oldDoc.get("text").split(" ")[1]);
-          if (value != numbers.get(i)) {
-            if (DEBUG) System.out.println("FAIL: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.get(i) + " numbers=" + numbers);
+          assertEquals(i, numbers.nextDoc());
+          if (value != numbers.longValue()) {
+            if (DEBUG) System.out.println("FAIL: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.longValue() + " numbers=" + numbers);
             failed = true;
           } else if (failed) {
-            if (DEBUG) System.out.println("OK: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.get(i));
+            if (DEBUG) System.out.println("OK: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.longValue());
           }
         }
         assertFalse("FAILED field=" + fieldName + " r=" + r, failed);
@@ -817,7 +822,8 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
             // TODO: is this still O(blockSize^2)?
             Document oldDoc = reader.document(i);
             Document newDoc = new Document();
-            newDoc.add(new NumericDocValuesField("number", newSchemaGen*(oldValues.get(i)/oldSchemaGen)));
+            assertEquals(i, oldValues.nextDoc());
+            newDoc.add(new NumericDocValuesField("number", newSchemaGen*(oldValues.longValue()/oldSchemaGen)));
             w.addDocument(newDoc);
           }
         }
@@ -850,11 +856,12 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
           Document oldDoc = r.document(i);
           long value = Long.parseLong(oldDoc.get("text").split(" ")[1]);
           value *= schemaGen;
-          if (value != numbers.get(i)) {
-            System.out.println("FAIL: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.get(i) + " numbers=" + numbers);
+          assertEquals(i, numbers.nextDoc());
+          if (value != numbers.longValue()) {
+            System.out.println("FAIL: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.longValue() + " numbers=" + numbers);
             failed = true;
           } else if (failed) {
-            System.out.println("OK: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.get(i));
+            System.out.println("OK: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.longValue());
           }
         }
         assertFalse("FAILED r=" + r, failed);
@@ -1110,7 +1117,8 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
             for(int i=0;i<maxDoc;i++) {
               Document doc = leaf.document(i);
               long value = Long.parseLong(doc.get("text").split(" ")[1]);
-              long dvValue = numbers.get(i);
+              assertEquals(i, numbers.nextDoc());
+              long dvValue = numbers.longValue();
               if (value == 0) {
                 assertEquals(0, dvValue);
               } else {
@@ -1278,11 +1286,12 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
     for(int i=0;i<maxDoc;i++) {
       Document oldDoc = r.document(i);
       long value = multiplier * Long.parseLong(oldDoc.get("text").split(" ")[1]);
-      if (value != numbers.get(i)) {
-        System.out.println("FAIL: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.get(i) + " numbers=" + numbers);
+      assertEquals(i, numbers.nextDoc());
+      if (value != numbers.longValue()) {
+        System.out.println("FAIL: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.longValue() + " numbers=" + numbers);
         failed = true;
       } else if (failed) {
-        System.out.println("OK: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.get(i));
+        System.out.println("OK: docID=" + i + " " + oldDoc+ " value=" + value + " number=" + numbers.longValue());
       }
     }
     if (failed) {
@@ -1304,18 +1313,16 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
   private static void testNumericDVSort(IndexSearcher s) throws IOException {
     // Confirm we can sort by the new DV field:
     TopDocs hits = s.search(new MatchAllDocsQuery(), 100, new Sort(new SortField("number", SortField.Type.LONG)));
-    NumericDocValues numbers = MultiDocValues.getNumericValues(s.getIndexReader(), "number");
     long last = Long.MIN_VALUE;
     for(ScoreDoc scoreDoc : hits.scoreDocs) {
       long value = Long.parseLong(s.doc(scoreDoc.doc).get("text").split(" ")[1]);
       assertTrue(value >= last);
-      assertEquals(value, numbers.get(scoreDoc.doc));
+      assertEquals(value, ((Long) ((FieldDoc) scoreDoc).fields[0]).longValue());
       last = value;
     }
   }
 
   private static void testPointRangeQuery(IndexSearcher s) throws IOException {
-    NumericDocValues numbers = MultiDocValues.getNumericValues(s.getIndexReader(), "number");
     for(int i=0;i<100;i++) {
       // Confirm we can range search by the new indexed (numeric) field:
       long min = random().nextLong();
@@ -1331,7 +1338,24 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
         long value = Long.parseLong(s.doc(scoreDoc.doc).get("text").split(" ")[1]);
         assertTrue(value >= min);
         assertTrue(value <= max);
-        assertEquals(value, numbers.get(scoreDoc.doc));
+      }
+
+      Arrays.sort(hits.scoreDocs,
+                  new Comparator<ScoreDoc>() {
+                    @Override
+                    public int compare(ScoreDoc a, ScoreDoc b) {
+                      return a.doc - b.doc;
+                    }
+                  });
+
+      NumericDocValues numbers = MultiDocValues.getNumericValues(s.getIndexReader(), "number");
+      for(ScoreDoc hit : hits.scoreDocs) {
+        if (numbers.docID() < hit.doc) {
+          numbers.advance(hit.doc);
+        }
+        assertEquals(hit.doc, numbers.docID());
+        long value = Long.parseLong(s.doc(hit.doc).get("text").split(" ")[1]);
+        assertEquals(value, numbers.longValue());
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java b/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java
index 8c7090e..9ac719e 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java
@@ -46,6 +46,8 @@ import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.TestUtil;
 import org.junit.Assume;
 
+import static org.apache.lucene.search.DocIdSetIterator.NO_MORE_DOCS;
+
 public class TestDirectoryReader extends LuceneTestCase {
   
   public void testDocument() throws IOException {
@@ -573,8 +575,13 @@ public class TestDirectoryReader extends LuceneTestCase {
       NumericDocValues norms2 = MultiDocValues.getNormValues(index2, curField);
       if (norms1 != null && norms2 != null) {
         // todo: generalize this (like TestDuelingCodecs assert)
-        for (int i = 0; i < index1.maxDoc(); i++) {
-          assertEquals("Norm different for doc " + i + " and field '" + curField + "'.", norms1.get(i), norms2.get(i));
+        while (true) {
+          int docID = norms1.nextDoc();
+          assertEquals(docID, norms2.nextDoc());
+          if (docID == NO_MORE_DOCS) {
+            break;
+          }
+          assertEquals("Norm different for doc " + docID + " and field '" + curField + "'.", norms1.longValue(), norms2.longValue());
         }
       } else {
         assertNull(norms1);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java b/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java
index 0138b90..f415381 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java
@@ -204,6 +204,7 @@ public class TestDirectoryReaderReopen extends LuceneTestCase {
     final Directory dir = newDirectory();
     // NOTE: this also controls the number of threads!
     final int n = TestUtil.nextInt(random(), 20, 40);
+    
     IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
     for (int i = 0; i < n; i++) {
       writer.addDocument(createDocument(i, 3));
@@ -901,9 +902,14 @@ public class TestDirectoryReaderReopen extends LuceneTestCase {
     
     // sharing same core
     assertSame(latest.leaves().get(0).reader().getCoreCacheKey(), oldest.leaves().get(0).reader().getCoreCacheKey());
-    
-    assertEquals(1, getOnlyLeafReader(oldest).getNumericDocValues("dv").get(0));
-    assertEquals(2, getOnlyLeafReader(latest).getNumericDocValues("dv").get(0));
+
+    NumericDocValues values = getOnlyLeafReader(oldest).getNumericDocValues("dv");
+    assertEquals(0, values.nextDoc());
+    assertEquals(1, values.longValue());
+
+    values = getOnlyLeafReader(latest).getNumericDocValues("dv");
+    assertEquals(0, values.nextDoc());
+    assertEquals(2, values.longValue());
     
     latest.close();
     oldest.close();
@@ -943,9 +949,14 @@ public class TestDirectoryReaderReopen extends LuceneTestCase {
     
     // sharing same core
     assertSame(latest.leaves().get(0).reader().getCoreCacheKey(), oldest.leaves().get(0).reader().getCoreCacheKey());
-    
-    assertEquals(1, getOnlyLeafReader(oldest).getNumericDocValues("dv").get(0));
-    assertEquals(2, getOnlyLeafReader(latest).getNumericDocValues("dv").get(0));
+
+    NumericDocValues values = getOnlyLeafReader(oldest).getNumericDocValues("dv");
+    assertEquals(0, values.nextDoc());
+    assertEquals(1, values.longValue());
+
+    values = getOnlyLeafReader(latest).getNumericDocValues("dv");
+    assertEquals(0, values.nextDoc());
+    assertEquals(2, values.longValue());
     
     latest.close();
     oldest.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestDocValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDocValues.java b/lucene/core/src/test/org/apache/lucene/index/TestDocValues.java
index 2266caf..1f7ef30 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestDocValues.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestDocValues.java
@@ -49,7 +49,6 @@ public class TestDocValues extends LuceneTestCase {
     assertNotNull(DocValues.getSorted(r, "bogus"));
     assertNotNull(DocValues.getSortedSet(r, "bogus"));
     assertNotNull(DocValues.getSortedNumeric(r, "bogus"));
-    assertNotNull(DocValues.getDocsWithField(r, "bogus"));
     
     dr.close();
     iw.close();
@@ -84,9 +83,6 @@ public class TestDocValues extends LuceneTestCase {
     expectThrows(IllegalStateException.class, () -> {
       DocValues.getSortedNumeric(r, "foo");
     });
-    expectThrows(IllegalStateException.class, () -> {
-      DocValues.getDocsWithField(r, "foo");
-    });
     
     dr.close();
     iw.close();
@@ -108,7 +104,6 @@ public class TestDocValues extends LuceneTestCase {
     // ok
     assertNotNull(DocValues.getNumeric(r, "foo"));
     assertNotNull(DocValues.getSortedNumeric(r, "foo"));
-    assertNotNull(DocValues.getDocsWithField(r, "foo"));
     
     // errors
     expectThrows(IllegalStateException.class, () -> {
@@ -140,7 +135,6 @@ public class TestDocValues extends LuceneTestCase {
     
     // ok
     assertNotNull(DocValues.getBinary(r, "foo"));
-    assertNotNull(DocValues.getDocsWithField(r, "foo"));
     
     // errors
     expectThrows(IllegalStateException.class, () -> {
@@ -177,7 +171,6 @@ public class TestDocValues extends LuceneTestCase {
     assertNotNull(DocValues.getBinary(r, "foo"));
     assertNotNull(DocValues.getSorted(r, "foo"));
     assertNotNull(DocValues.getSortedSet(r, "foo"));
-    assertNotNull(DocValues.getDocsWithField(r, "foo"));
     
     // errors
     expectThrows(IllegalStateException.class, () -> {
@@ -206,7 +199,6 @@ public class TestDocValues extends LuceneTestCase {
     
     // ok
     assertNotNull(DocValues.getSortedSet(r, "foo"));
-    assertNotNull(DocValues.getDocsWithField(r, "foo"));
     
     // errors
     expectThrows(IllegalStateException.class, () -> {
@@ -241,11 +233,10 @@ public class TestDocValues extends LuceneTestCase {
     
     // ok
     assertNotNull(DocValues.getSortedNumeric(r, "foo"));
-    assertNotNull(DocValues.getDocsWithField(r, "foo"));
     
     // errors
     expectThrows(IllegalStateException.class, () -> {
-      DocValues.getBinary(r, "foo");
+        DocValues.getBinary(r, "foo");
     });
     expectThrows(IllegalStateException.class, () -> {
       DocValues.getNumeric(r, "foo");

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java b/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
index 2e0cbd9..b3260d0 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
@@ -35,7 +35,6 @@ import org.apache.lucene.document.SortedSetDocValuesField;
 import org.apache.lucene.document.StringField;
 import org.apache.lucene.document.TextField;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.TestUtil;
@@ -109,7 +108,9 @@ public class TestDocValuesIndexing extends LuceneTestCase {
 
     DirectoryReader r = w.getReader();
     w.close();
-    assertEquals(17, DocValues.getNumeric(getOnlyLeafReader(r), "field").get(0));
+    NumericDocValues values = DocValues.getNumeric(getOnlyLeafReader(r), "field");
+    assertEquals(0, values.nextDoc());
+    assertEquals(17, values.longValue());
     r.close();
     d.close();
   }
@@ -130,7 +131,9 @@ public class TestDocValuesIndexing extends LuceneTestCase {
 
     DirectoryReader r = w.getReader();
     w.close();
-    assertEquals(17, DocValues.getNumeric(getOnlyLeafReader(r), "field").get(0));
+    NumericDocValues values = DocValues.getNumeric(getOnlyLeafReader(r), "field");
+    assertEquals(0, values.nextDoc());
+    assertEquals(17, values.longValue());
     r.close();
     d.close();
   }
@@ -150,7 +153,9 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     });
 
     DirectoryReader r = w.getReader();
-    assertEquals(17, getOnlyLeafReader(r).getNumericDocValues("field").get(0));
+    NumericDocValues values = DocValues.getNumeric(getOnlyLeafReader(r), "field");
+    assertEquals(0, values.nextDoc());
+    assertEquals(17, values.longValue());
     r.close();
     w.close();
     d.close();
@@ -171,14 +176,15 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     w.addDocument(doc);
     w.forceMerge(1);
     DirectoryReader r = w.getReader();
-    BinaryDocValues s = DocValues.getSorted(getOnlyLeafReader(r), "field");
-
-    BytesRef bytes1 = s.get(0);
+    BinaryDocValues s = DocValues.getBinary(getOnlyLeafReader(r), "field");
+    assertEquals(0, s.nextDoc());
+    BytesRef bytes1 = s.binaryValue();
     assertEquals(bytes.length, bytes1.length);
     bytes[0] = 0;
     assertEquals(b, bytes1);
     
-    bytes1 = s.get(1);
+    assertEquals(1, s.nextDoc());
+    bytes1 = s.binaryValue();
     assertEquals(bytes.length, bytes1.length);
     bytes[0] = 1;
     assertEquals(b, bytes1);
@@ -204,7 +210,8 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     assertTrue(dvInfo.getDocValuesType() != DocValuesType.NONE);
     NumericDocValues dv = MultiDocValues.getNumericValues(r, "dv");
     for (int i = 0; i < 50; i++) {
-      assertEquals(i, dv.get(i));
+      assertEquals(i, dv.nextDoc());
+      assertEquals(i, dv.longValue());
       Document d = r.document(i);
       // cannot use d.get("dv") due to another bug!
       assertNull(d.getField("dv"));
@@ -815,9 +822,6 @@ public class TestDocValuesIndexing extends LuceneTestCase {
     LeafReader subR = r.leaves().get(0).reader();
     assertEquals(2, subR.numDocs());
 
-    Bits bits = DocValues.getDocsWithField(subR, "dv");
-    assertTrue(bits.get(0));
-    assertTrue(bits.get(1));
     r.close();
     dir.close();
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java
index 5045396..3e72a7e 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexSorting.java
@@ -67,7 +67,6 @@ import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.search.TopFieldCollector;
 import org.apache.lucene.search.similarities.Similarity;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.lucene.util.IOUtils;
@@ -75,6 +74,8 @@ import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.NumericUtils;
 import org.apache.lucene.util.TestUtil;
 
+import static org.apache.lucene.search.DocIdSetIterator.NO_MORE_DOCS;
+
 public class TestIndexSorting extends LuceneTestCase {
 
   public void testBasicString() throws Exception {
@@ -103,9 +104,12 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     SortedDocValues values = leaf.getSortedDocValues("foo");
-    assertEquals("aaa", values.get(0).utf8ToString());
-    assertEquals("mmm", values.get(1).utf8ToString());
-    assertEquals("zzz", values.get(2).utf8ToString());
+    assertEquals(0, values.nextDoc());
+    assertEquals("aaa", values.binaryValue().utf8ToString());
+    assertEquals(1, values.nextDoc());
+    assertEquals("mmm", values.binaryValue().utf8ToString());
+    assertEquals(2, values.nextDoc());
+    assertEquals("zzz", values.binaryValue().utf8ToString());
     r.close();
     w.close();
     dir.close();
@@ -138,9 +142,11 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     SortedDocValues values = leaf.getSortedDocValues("foo");
-    assertEquals(-1, values.getOrd(0));
-    assertEquals("mmm", values.get(1).utf8ToString());
-    assertEquals("zzz", values.get(2).utf8ToString());
+    // docID 0 is missing:
+    assertEquals(1, values.nextDoc());
+    assertEquals("mmm", values.binaryValue().utf8ToString());
+    assertEquals(2, values.nextDoc());
+    assertEquals("zzz", values.binaryValue().utf8ToString());
     r.close();
     w.close();
     dir.close();
@@ -173,9 +179,11 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     SortedDocValues values = leaf.getSortedDocValues("foo");
-    assertEquals("mmm", values.get(0).utf8ToString());
-    assertEquals("zzz", values.get(1).utf8ToString());
-    assertEquals(-1, values.getOrd(2));
+    assertEquals(0, values.nextDoc());
+    assertEquals("mmm", values.binaryValue().utf8ToString());
+    assertEquals(1, values.nextDoc());
+    assertEquals("zzz", values.binaryValue().utf8ToString());
+    assertEquals(NO_MORE_DOCS, values.nextDoc());
     r.close();
     w.close();
     dir.close();
@@ -207,9 +215,12 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    assertEquals(-1, values.get(0));
-    assertEquals(7, values.get(1));
-    assertEquals(18, values.get(2));
+    assertEquals(0, values.nextDoc());
+    assertEquals(-1, values.longValue());
+    assertEquals(1, values.nextDoc());
+    assertEquals(7, values.longValue());
+    assertEquals(2, values.nextDoc());
+    assertEquals(18, values.longValue());
     r.close();
     w.close();
     dir.close();
@@ -242,11 +253,11 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    Bits docsWithField = leaf.getDocsWithField("foo");
-    assertEquals(0, values.get(0));
-    assertFalse(docsWithField.get(0));
-    assertEquals(7, values.get(1));
-    assertEquals(18, values.get(2));
+    // docID 0 has no value
+    assertEquals(1, values.nextDoc());
+    assertEquals(7, values.longValue());
+    assertEquals(2, values.nextDoc());
+    assertEquals(18, values.longValue());
     r.close();
     w.close();
     dir.close();
@@ -279,11 +290,11 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    Bits docsWithField = leaf.getDocsWithField("foo");
-    assertEquals(7, values.get(0));
-    assertEquals(18, values.get(1));
-    assertEquals(0, values.get(2));
-    assertFalse(docsWithField.get(2));
+    assertEquals(0, values.nextDoc());
+    assertEquals(7, values.longValue());
+    assertEquals(1, values.nextDoc());
+    assertEquals(18, values.longValue());
+    assertEquals(NO_MORE_DOCS, values.nextDoc());
     r.close();
     w.close();
     dir.close();
@@ -315,9 +326,12 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    assertEquals(-1, values.get(0));
-    assertEquals(7, values.get(1));
-    assertEquals(18, values.get(2));
+    assertEquals(0, values.nextDoc());
+    assertEquals(-1, values.longValue());
+    assertEquals(1, values.nextDoc());
+    assertEquals(7, values.longValue());
+    assertEquals(2, values.nextDoc());
+    assertEquals(18, values.longValue());
     r.close();
     w.close();
     dir.close();
@@ -350,11 +364,10 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    Bits docsWithField = leaf.getDocsWithField("foo");
-    assertEquals(0, values.get(0));
-    assertFalse(docsWithField.get(0));
-    assertEquals(7, values.get(1));
-    assertEquals(18, values.get(2));
+    assertEquals(1, values.nextDoc());
+    assertEquals(7, values.longValue());
+    assertEquals(2, values.nextDoc());
+    assertEquals(18, values.longValue());
     r.close();
     w.close();
     dir.close();
@@ -387,11 +400,11 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    Bits docsWithField = leaf.getDocsWithField("foo");
-    assertEquals(7, values.get(0));
-    assertEquals(18, values.get(1));
-    assertEquals(0, values.get(2));
-    assertFalse(docsWithField.get(2));
+    assertEquals(0, values.nextDoc());
+    assertEquals(7, values.longValue());
+    assertEquals(1, values.nextDoc());
+    assertEquals(18, values.longValue());
+    assertEquals(NO_MORE_DOCS, values.nextDoc());
     r.close();
     w.close();
     dir.close();
@@ -423,9 +436,12 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    assertEquals(-1.0, Double.longBitsToDouble(values.get(0)), 0.0);
-    assertEquals(7.0, Double.longBitsToDouble(values.get(1)), 0.0);
-    assertEquals(18.0, Double.longBitsToDouble(values.get(2)), 0.0);
+    assertEquals(0, values.nextDoc());
+    assertEquals(-1.0, Double.longBitsToDouble(values.longValue()), 0.0);
+    assertEquals(1, values.nextDoc());
+    assertEquals(7.0, Double.longBitsToDouble(values.longValue()), 0.0);
+    assertEquals(2, values.nextDoc());
+    assertEquals(18.0, Double.longBitsToDouble(values.longValue()), 0.0);
     r.close();
     w.close();
     dir.close();
@@ -458,11 +474,10 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    Bits docsWithField = leaf.getDocsWithField("foo");
-    assertEquals(0.0, Double.longBitsToDouble(values.get(0)), 0.0);
-    assertFalse(docsWithField.get(0));
-    assertEquals(7.0, Double.longBitsToDouble(values.get(1)), 0.0);
-    assertEquals(18.0, Double.longBitsToDouble(values.get(2)), 0.0);
+    assertEquals(1, values.nextDoc());
+    assertEquals(7.0, Double.longBitsToDouble(values.longValue()), 0.0);
+    assertEquals(2, values.nextDoc());
+    assertEquals(18.0, Double.longBitsToDouble(values.longValue()), 0.0);
     r.close();
     w.close();
     dir.close();
@@ -495,11 +510,11 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    Bits docsWithField = leaf.getDocsWithField("foo");
-    assertEquals(7.0, Double.longBitsToDouble(values.get(0)), 0.0);
-    assertEquals(18.0, Double.longBitsToDouble(values.get(1)), 0.0);
-    assertEquals(0.0, Double.longBitsToDouble(values.get(2)), 0.0);
-    assertFalse(docsWithField.get(2));
+    assertEquals(0, values.nextDoc());
+    assertEquals(7.0, Double.longBitsToDouble(values.longValue()), 0.0);
+    assertEquals(1, values.nextDoc());
+    assertEquals(18.0, Double.longBitsToDouble(values.longValue()), 0.0);
+    assertEquals(NO_MORE_DOCS, values.nextDoc());
     r.close();
     w.close();
     dir.close();
@@ -531,9 +546,12 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    assertEquals(-1.0f, Float.intBitsToFloat((int) values.get(0)), 0.0f);
-    assertEquals(7.0f, Float.intBitsToFloat((int) values.get(1)), 0.0f);
-    assertEquals(18.0f, Float.intBitsToFloat((int) values.get(2)), 0.0f);
+    assertEquals(0, values.nextDoc());
+    assertEquals(-1.0f, Float.intBitsToFloat((int) values.longValue()), 0.0f);
+    assertEquals(1, values.nextDoc());
+    assertEquals(7.0f, Float.intBitsToFloat((int) values.longValue()), 0.0f);
+    assertEquals(2, values.nextDoc());
+    assertEquals(18.0f, Float.intBitsToFloat((int) values.longValue()), 0.0f);
     r.close();
     w.close();
     dir.close();
@@ -566,11 +584,10 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    Bits docsWithField = leaf.getDocsWithField("foo");
-    assertEquals(0.0f, Float.intBitsToFloat((int) values.get(0)), 0.0f);
-    assertFalse(docsWithField.get(0));
-    assertEquals(7.0f, Float.intBitsToFloat((int) values.get(1)), 0.0f);
-    assertEquals(18.0f, Float.intBitsToFloat((int) values.get(2)), 0.0f);
+    assertEquals(1, values.nextDoc());
+    assertEquals(7.0f, Float.intBitsToFloat((int) values.longValue()), 0.0f);
+    assertEquals(2, values.nextDoc());
+    assertEquals(18.0f, Float.intBitsToFloat((int) values.longValue()), 0.0f);
     r.close();
     w.close();
     dir.close();
@@ -603,11 +620,11 @@ public class TestIndexSorting extends LuceneTestCase {
     LeafReader leaf = getOnlyLeafReader(r);
     assertEquals(3, leaf.maxDoc());
     NumericDocValues values = leaf.getNumericDocValues("foo");
-    Bits docsWithField = leaf.getDocsWithField("foo");
-    assertEquals(7.0f, Float.intBitsToFloat((int) values.get(0)), 0.0f);
-    assertEquals(18.0f, Float.intBitsToFloat((int) values.get(1)), 0.0f);
-    assertEquals(0.0f, Float.intBitsToFloat((int) values.get(2)), 0.0f);
-    assertFalse(docsWithField.get(2));
+    assertEquals(0, values.nextDoc());
+    assertEquals(7.0f, Float.intBitsToFloat((int) values.longValue()), 0.0f);
+    assertEquals(1, values.nextDoc());
+    assertEquals(18.0f, Float.intBitsToFloat((int) values.longValue()), 0.0f);
+    assertEquals(NO_MORE_DOCS, values.nextDoc());
     r.close();
     w.close();
     dir.close();
@@ -653,7 +670,8 @@ public class TestIndexSorting extends LuceneTestCase {
           final NumericDocValues values = leaf.getNumericDocValues("foo");
           long previous = Long.MIN_VALUE;
           for (int i = 0; i < leaf.maxDoc(); ++i) {
-            final long value = values.get(i);
+            assertEquals(i, values.nextDoc());
+            final long value = values.longValue();
             assertTrue(value >= previous);
             previous = value;
           }
@@ -672,7 +690,9 @@ public class TestIndexSorting extends LuceneTestCase {
         assertEquals(0, topDocs.totalHits);
       } else {
         assertEquals(1, topDocs.totalHits);
-        assertEquals(i, MultiDocValues.getNumericValues(reader, "id").get(topDocs.scoreDocs[0].doc));
+        NumericDocValues values = MultiDocValues.getNumericValues(reader, "id");
+        assertEquals(topDocs.scoreDocs[0].doc, values.advance(topDocs.scoreDocs[0].doc));
+        assertEquals(i, values.longValue());
         Document document = reader.document(topDocs.scoreDocs[0].doc);
         assertEquals(Integer.toString(i), document.get("id"));
       }
@@ -746,6 +766,7 @@ public class TestIndexSorting extends LuceneTestCase {
 
     final int numDocs = atLeast(100);
     Thread[] threads = new Thread[2];
+    
     final AtomicInteger updateCount = new AtomicInteger(atLeast(1000));
     final CountDownLatch latch = new CountDownLatch(1);
     for (int i = 0; i < threads.length; ++i) {
@@ -768,7 +789,10 @@ public class TestIndexSorting extends LuceneTestCase {
         assertEquals(0, topDocs.totalHits);
       } else {
         assertEquals(1, topDocs.totalHits);
-        assertEquals(values.get(i).longValue(), MultiDocValues.getNumericValues(reader, "foo").get(topDocs.scoreDocs[0].doc));
+        NumericDocValues dvs = MultiDocValues.getNumericValues(reader, "foo");
+        int docID = topDocs.scoreDocs[0].doc;
+        assertEquals(docID, dvs.advance(docID));
+        assertEquals(values.get(i).longValue(), dvs.longValue());
       }
     }
     reader.close();
@@ -862,7 +886,10 @@ public class TestIndexSorting extends LuceneTestCase {
     for (int i = 0; i < numDocs; ++i) {
       final TopDocs topDocs = searcher.search(new TermQuery(new Term("id", Integer.toString(i))), 1);
       assertEquals(1, topDocs.totalHits);
-      assertEquals(values.get(i).longValue(), MultiDocValues.getNumericValues(reader, "foo").get(topDocs.scoreDocs[0].doc));
+      NumericDocValues dvs = MultiDocValues.getNumericValues(reader, "foo");
+      int hitDoc = topDocs.scoreDocs[0].doc;
+      assertEquals(hitDoc, dvs.advance(hitDoc));
+      assertEquals(values.get(i).longValue(), dvs.longValue());
     }
     reader.close();
     w.close();
@@ -918,9 +945,15 @@ public class TestIndexSorting extends LuceneTestCase {
       final TopDocs topDocs2 = searcher2.search(query, 1);
       assertEquals(topDocs.totalHits, topDocs2.totalHits);
       if (topDocs.totalHits == 1) {
-        assertEquals(
-            MultiDocValues.getNumericValues(reader, "foo").get(topDocs.scoreDocs[0].doc),
-            MultiDocValues.getNumericValues(reader2, "foo").get(topDocs2.scoreDocs[0].doc));
+        NumericDocValues dvs1 = MultiDocValues.getNumericValues(reader, "foo");
+        int hitDoc1 = topDocs.scoreDocs[0].doc;
+        assertEquals(hitDoc1, dvs1.advance(hitDoc1));
+        long value1 = dvs1.longValue();
+        NumericDocValues dvs2 = MultiDocValues.getNumericValues(reader2, "foo");
+        int hitDoc2 = topDocs2.scoreDocs[0].doc;
+        assertEquals(hitDoc2, dvs2.advance(hitDoc2));
+        long value2 = dvs2.longValue();
+        assertEquals(value1, value2);
       }
     }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
index 7a47d97..6f112a7 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
@@ -2555,7 +2555,9 @@ public class TestIndexWriter extends LuceneTestCase {
     w.commit();
     w.close();
     DirectoryReader r = DirectoryReader.open(d);
-    assertEquals(0, getOnlyLeafReader(r).getNormValues("foo").get(0));
+    NumericDocValues norms = getOnlyLeafReader(r).getNormValues("foo");
+    assertEquals(0, norms.nextDoc());
+    assertEquals(0, norms.longValue());
     r.close();
     d.close();
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
index 4992338..6fdfca8 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
@@ -2039,8 +2039,12 @@ public class TestIndexWriterExceptions extends LuceneTestCase {
         BinaryDocValues bcf = reader.getBinaryDocValues("bcf");
         for (int i = 0; i < reader.maxDoc(); i++) {
           if (liveDocs == null || liveDocs.get(i)) {
-            assertEquals("doc=" + (docBase + i), cf.get(i), f.get(i) * 2);
-            assertEquals("doc=" + (docBase + i), TestBinaryDocValuesUpdates.getValue(bcf, i), TestBinaryDocValuesUpdates.getValue(bf, i) * 2);
+            assertEquals(i, f.advance(i));
+            assertEquals(i, cf.advance(i));
+            assertEquals(i, bf.advance(i));
+            assertEquals(i, bcf.advance(i));
+            assertEquals("doc=" + (docBase + i), cf.longValue(), f.longValue() * 2);
+            assertEquals("doc=" + (docBase + i), TestBinaryDocValuesUpdates.getValue(bcf), TestBinaryDocValuesUpdates.getValue(bf) * 2);
           }
         }
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestIndexingSequenceNumbers.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexingSequenceNumbers.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexingSequenceNumbers.java
index 55aa6e0..52f806a 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexingSequenceNumbers.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexingSequenceNumbers.java
@@ -433,16 +433,18 @@ public class TestIndexingSequenceNumbers extends LuceneTestCase {
 
       DirectoryReader r = DirectoryReader.open(indexCommits.get(i));
       IndexSearcher s = new IndexSearcher(r);
-      NumericDocValues docValues = MultiDocValues.getNumericValues(r, "thread");
 
       for(int id=0;id<idCount;id++) {
         //System.out.println("TEST: check id=" + id + " expectedThreadID=" + expectedThreadIDs[id]);
         TopDocs hits = s.search(new TermQuery(new Term("id", ""+id)), 1);
+        NumericDocValues docValues = MultiDocValues.getNumericValues(r, "thread");
 
         // We pre-add all ids up front:
         assert expectedThreadIDs[id] != -1;
         assertEquals(1, hits.totalHits);
-        int actualThreadID = (int) docValues.get(hits.scoreDocs[0].doc);
+        int hitDoc = hits.scoreDocs[0].doc;
+        assertEquals(hitDoc, docValues.advance(hitDoc));
+        int actualThreadID = (int) docValues.longValue();
         if (expectedThreadIDs[id] != actualThreadID) {
           System.out.println("FAIL: commit=" + i + " (of " + commits.size() + ") id=" + id + " expectedThreadID=" + expectedThreadIDs[id] + " vs actualThreadID=" + actualThreadID + " commitSeqNo=" + commitSeqNo + " numThreads=" + numThreads + " reader=" + r + " commit=" + indexCommits.get(i));
           for(int threadID=0;threadID<threadOps.size();threadID++) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java b/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
index 29a7cd1..900ec2b 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
@@ -70,7 +70,8 @@ public class TestMaxTermFrequency extends LuceneTestCase {
   public void test() throws Exception {
     NumericDocValues fooNorms = MultiDocValues.getNormValues(reader, "foo");
     for (int i = 0; i < reader.maxDoc(); i++) {
-      assertEquals(expected.get(i).intValue(), fooNorms.get(i) & 0xff);
+      assertEquals(i, fooNorms.nextDoc());
+      assertEquals(expected.get(i).intValue(), fooNorms.longValue() & 0xff);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java b/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java
index 1f43ddd..f40379f 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestMixedDocValuesUpdates.java
@@ -122,7 +122,6 @@ public class TestMixedDocValuesUpdates extends LuceneTestCase {
           String f = "f" + field;
           BinaryDocValues bdv = r.getBinaryDocValues(f);
           NumericDocValues ndv = r.getNumericDocValues(f);
-          Bits docsWithField = r.getDocsWithField(f);
           if (field < numNDVFields) {
             assertNotNull(ndv);
             assertNull(bdv);
@@ -134,11 +133,12 @@ public class TestMixedDocValuesUpdates extends LuceneTestCase {
           for (int doc = 0; doc < maxDoc; doc++) {
             if (liveDocs == null || liveDocs.get(doc)) {
 //              System.out.println("doc=" + (doc + context.docBase) + " f='" + f + "' vslue=" + getValue(bdv, doc, scratch));
-              assertTrue(docsWithField.get(doc));
               if (field < numNDVFields) {
-                assertEquals("invalid numeric value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], ndv.get(doc));
+                assertEquals(doc, ndv.advance(doc));
+                assertEquals("invalid numeric value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], ndv.longValue());
               } else {
-                assertEquals("invalid binary value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], TestBinaryDocValuesUpdates.getValue(bdv, doc));
+                assertEquals(doc, bdv.advance(doc));
+                assertEquals("invalid binary value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], TestBinaryDocValuesUpdates.getValue(bdv));
               }
             }
           }
@@ -264,15 +264,13 @@ public class TestMixedDocValuesUpdates extends LuceneTestCase {
       for (int i = 0; i < numFields; i++) {
         BinaryDocValues bdv = r.getBinaryDocValues("f" + i);
         NumericDocValues control = r.getNumericDocValues("cf" + i);
-        Bits docsWithBdv = r.getDocsWithField("f" + i);
-        Bits docsWithControl = r.getDocsWithField("cf" + i);
         Bits liveDocs = r.getLiveDocs();
         for (int j = 0; j < r.maxDoc(); j++) {
           if (liveDocs == null || liveDocs.get(j)) {
-            assertTrue(docsWithBdv.get(j));
-            assertTrue(docsWithControl.get(j));
-            long ctrlValue = control.get(j);
-            long bdvValue = TestBinaryDocValuesUpdates.getValue(bdv, j) * 2;
+            assertEquals(j, control.advance(j));
+            long ctrlValue = control.longValue();
+            assertEquals(j, bdv.advance(j));
+            long bdvValue = TestBinaryDocValuesUpdates.getValue(bdv) * 2;
 //              if (ctrlValue != bdvValue) {
 //                System.out.println("seg=" + r + ", f=f" + i + ", doc=" + j + ", group=" + r.document(j).get("updKey") + ", ctrlValue=" + ctrlValue + ", bdvBytes=" + scratch);
 //              }
@@ -315,7 +313,9 @@ public class TestMixedDocValuesUpdates extends LuceneTestCase {
         BinaryDocValues fbdv = r.getBinaryDocValues("f");
         NumericDocValues cfndv = r.getNumericDocValues("cf");
         for (int j = 0; j < r.maxDoc(); j++) {
-          assertEquals(cfndv.get(j), TestBinaryDocValuesUpdates.getValue(fbdv, j) * 2);
+          assertEquals(j, cfndv.nextDoc());
+          assertEquals(j, fbdv.nextDoc());
+          assertEquals(cfndv.longValue(), TestBinaryDocValuesUpdates.getValue(fbdv) * 2);
         }
       }
       reader.close();
@@ -384,7 +384,9 @@ public class TestMixedDocValuesUpdates extends LuceneTestCase {
         BinaryDocValues f = r.getBinaryDocValues("f" + i);
         NumericDocValues cf = r.getNumericDocValues("cf" + i);
         for (int j = 0; j < r.maxDoc(); j++) {
-          assertEquals("reader=" + r + ", field=f" + i + ", doc=" + j, cf.get(j), TestBinaryDocValuesUpdates.getValue(f, j) * 2);
+          assertEquals(j, cf.nextDoc());
+          assertEquals(j, f.nextDoc());
+          assertEquals("reader=" + r + ", field=f" + i + ", doc=" + j, cf.longValue(), TestBinaryDocValuesUpdates.getValue(f) * 2);
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java b/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
index 5b70c38..f6669d5 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
@@ -17,6 +17,7 @@
 package org.apache.lucene.index;
 
 
+import java.io.IOException;
 import java.util.ArrayList;
 
 import org.apache.lucene.document.BinaryDocValuesField;
@@ -26,12 +27,15 @@ import org.apache.lucene.document.NumericDocValuesField;
 import org.apache.lucene.document.SortedDocValuesField;
 import org.apache.lucene.document.SortedNumericDocValuesField;
 import org.apache.lucene.document.SortedSetDocValuesField;
+import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.TestUtil;
 
+import static org.apache.lucene.search.DocIdSetIterator.NO_MORE_DOCS;
+
+
 /** Tests MultiDocValues versus ordinary segment merging */
 public class TestMultiDocValues extends LuceneTestCase {
   
@@ -62,8 +66,12 @@ public class TestMultiDocValues extends LuceneTestCase {
     NumericDocValues multi = MultiDocValues.getNumericValues(ir, "numbers");
     NumericDocValues single = merged.getNumericDocValues("numbers");
     for (int i = 0; i < numDocs; i++) {
-      assertEquals(single.get(i), multi.get(i));
+      assertEquals(i, multi.nextDoc());
+      assertEquals(i, single.nextDoc());
+      assertEquals(single.longValue(), multi.longValue());
     }
+    testRandomAdvance(merged.getNumericDocValues("numbers"), MultiDocValues.getNumericValues(ir, "numbers"));
+    
     ir.close();
     ir2.close();
     dir.close();
@@ -80,6 +88,7 @@ public class TestMultiDocValues extends LuceneTestCase {
     RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc);
 
     int numDocs = TEST_NIGHTLY ? atLeast(500) : atLeast(50);
+
     for (int i = 0; i < numDocs; i++) {
       BytesRef ref = new BytesRef(TestUtil.randomUnicodeString(random()));
       field.setBytesValue(ref);
@@ -93,14 +102,18 @@ public class TestMultiDocValues extends LuceneTestCase {
     DirectoryReader ir2 = iw.getReader();
     LeafReader merged = getOnlyLeafReader(ir2);
     iw.close();
-    
+
     BinaryDocValues multi = MultiDocValues.getBinaryValues(ir, "bytes");
     BinaryDocValues single = merged.getBinaryDocValues("bytes");
     for (int i = 0; i < numDocs; i++) {
-      final BytesRef expected = BytesRef.deepCopyOf(single.get(i));
-      final BytesRef actual = multi.get(i);
+      assertEquals(i, multi.nextDoc());
+      assertEquals(i, single.nextDoc());
+      final BytesRef expected = BytesRef.deepCopyOf(single.binaryValue());
+      final BytesRef actual = multi.binaryValue();
       assertEquals(expected, actual);
     }
+    testRandomAdvance(merged.getBinaryDocValues("bytes"), MultiDocValues.getBinaryValues(ir, "bytes"));
+
     ir.close();
     ir2.close();
     dir.close();
@@ -133,18 +146,24 @@ public class TestMultiDocValues extends LuceneTestCase {
     DirectoryReader ir2 = iw.getReader();
     LeafReader merged = getOnlyLeafReader(ir2);
     iw.close();
-    
     SortedDocValues multi = MultiDocValues.getSortedValues(ir, "bytes");
     SortedDocValues single = merged.getSortedDocValues("bytes");
     assertEquals(single.getValueCount(), multi.getValueCount());
-    for (int i = 0; i < numDocs; i++) {
-      // check ord
-      assertEquals(single.getOrd(i), multi.getOrd(i));
+    while (true) {
+      assertEquals(single.nextDoc(), multi.nextDoc());
+      if (single.docID() == NO_MORE_DOCS) {
+        break;
+      }
+
       // check value
-      final BytesRef expected = BytesRef.deepCopyOf(single.get(i));
-      final BytesRef actual = multi.get(i);
+      final BytesRef expected = BytesRef.deepCopyOf(single.binaryValue());
+      final BytesRef actual = multi.binaryValue();
       assertEquals(expected, actual);
+
+      // check ord
+      assertEquals(single.ordValue(), multi.ordValue());
     }
+    testRandomAdvance(merged.getSortedDocValues("bytes"), MultiDocValues.getSortedValues(ir, "bytes"));
     ir.close();
     ir2.close();
     dir.close();
@@ -180,13 +199,17 @@ public class TestMultiDocValues extends LuceneTestCase {
     SortedDocValues single = merged.getSortedDocValues("bytes");
     assertEquals(single.getValueCount(), multi.getValueCount());
     for (int i = 0; i < numDocs; i++) {
+      assertEquals(i, multi.nextDoc());
+      assertEquals(i, single.nextDoc());
       // check ord
-      assertEquals(single.getOrd(i), multi.getOrd(i));
+      assertEquals(single.ordValue(), multi.ordValue());
       // check ord value
-      final BytesRef expected = BytesRef.deepCopyOf(single.get(i));
-      final BytesRef actual = multi.get(i);
+      final BytesRef expected = BytesRef.deepCopyOf(single.binaryValue());
+      final BytesRef actual = multi.binaryValue();
       assertEquals(expected, actual);
     }
+    testRandomAdvance(merged.getSortedDocValues("bytes"), MultiDocValues.getSortedValues(ir, "bytes"));
+    
     ir.close();
     ir2.close();
     dir.close();
@@ -230,15 +253,19 @@ public class TestMultiDocValues extends LuceneTestCase {
         assertEquals(expected, actual);
       }
       // check ord list
-      for (int i = 0; i < numDocs; i++) {
-        single.setDocument(i);
+      while (true) {
+        int docID = single.nextDoc();
+        assertEquals(docID, multi.nextDoc());
+        if (docID == NO_MORE_DOCS) {
+          break;
+        }
+
         ArrayList<Long> expectedList = new ArrayList<>();
         long ord;
         while ((ord = single.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
           expectedList.add(ord);
         }
         
-        multi.setDocument(i);
         int upto = 0;
         while ((ord = multi.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
           assertEquals(expectedList.get(upto).longValue(), ord);
@@ -247,6 +274,7 @@ public class TestMultiDocValues extends LuceneTestCase {
         assertEquals(expectedList.size(), upto);
       }
     }
+    testRandomAdvance(merged.getSortedSetDocValues("bytes"), MultiDocValues.getSortedSetValues(ir, "bytes"));
     
     ir.close();
     ir2.close();
@@ -292,15 +320,18 @@ public class TestMultiDocValues extends LuceneTestCase {
         assertEquals(expected, actual);
       }
       // check ord list
-      for (int i = 0; i < numDocs; i++) {
-        single.setDocument(i);
+      while (true) {
+        int docID = single.nextDoc();
+        assertEquals(docID, multi.nextDoc());
+        if (docID == NO_MORE_DOCS) {
+          break;
+        }
         ArrayList<Long> expectedList = new ArrayList<>();
         long ord;
         while ((ord = single.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
           expectedList.add(ord);
         }
         
-        multi.setDocument(i);
         int upto = 0;
         while ((ord = multi.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
           assertEquals(expectedList.get(upto).longValue(), ord);
@@ -309,6 +340,7 @@ public class TestMultiDocValues extends LuceneTestCase {
         assertEquals(expectedList.size(), upto);
       }
     }
+    testRandomAdvance(merged.getSortedSetDocValues("bytes"), MultiDocValues.getSortedSetValues(ir, "bytes"));
     
     ir.close();
     ir2.close();
@@ -347,69 +379,35 @@ public class TestMultiDocValues extends LuceneTestCase {
     } else {
       // check values
       for (int i = 0; i < numDocs; i++) {
-        single.setDocument(i);
-        ArrayList<Long> expectedList = new ArrayList<>();
-        for (int j = 0; j < single.count(); j++) {
-          expectedList.add(single.valueAt(j));
+        if (i > single.docID()) {
+          assertEquals(single.nextDoc(), multi.nextDoc());
         }
-        
-        multi.setDocument(i);
-        assertEquals(expectedList.size(), multi.count());
-        for (int j = 0; j < single.count(); j++) {
-          assertEquals(expectedList.get(j).longValue(), multi.valueAt(j));
+        if (i == single.docID()) {
+          assertEquals(single.docValueCount(), multi.docValueCount());
+          for (int j = 0; j < single.docValueCount(); j++) {
+            assertEquals(single.nextValue(), multi.nextValue());
+          }
         }
       }
     }
+    testRandomAdvance(merged.getSortedNumericDocValues("nums"), MultiDocValues.getSortedNumericValues(ir, "nums"));
     
     ir.close();
     ir2.close();
     dir.close();
   }
-  
-  public void testDocsWithField() throws Exception {
-    Directory dir = newDirectory();
-    
-    IndexWriterConfig iwc = newIndexWriterConfig(random(), null);
-    iwc.setMergePolicy(newLogMergePolicy());
-    RandomIndexWriter iw = new RandomIndexWriter(random(), dir, iwc);
 
-    int numDocs = TEST_NIGHTLY ? atLeast(500) : atLeast(50);
-    for (int i = 0; i < numDocs; i++) {
-      Document doc = new Document();
-      if (random().nextInt(4) >= 0) {
-        doc.add(new NumericDocValuesField("numbers", random().nextLong()));
-      }
-      doc.add(new NumericDocValuesField("numbersAlways", random().nextLong()));
-      iw.addDocument(doc);
-      if (random().nextInt(17) == 0) {
-        iw.commit();
-      }
-    }
-    DirectoryReader ir = iw.getReader();
-    iw.forceMerge(1);
-    DirectoryReader ir2 = iw.getReader();
-    LeafReader merged = getOnlyLeafReader(ir2);
-    iw.close();
-    
-    Bits multi = MultiDocValues.getDocsWithField(ir, "numbers");
-    Bits single = merged.getDocsWithField("numbers");
-    if (multi == null) {
-      assertNull(single);
-    } else {
-      assertEquals(single.length(), multi.length());
-      for (int i = 0; i < numDocs; i++) {
-        assertEquals(single.get(i), multi.get(i));
+  private void testRandomAdvance(DocIdSetIterator iter1, DocIdSetIterator iter2) throws IOException {
+    assertEquals(-1, iter1.docID());
+    assertEquals(-1, iter2.docID());
+
+    while (iter1.docID() != NO_MORE_DOCS) {
+      if (random().nextBoolean()) {
+        assertEquals(iter1.nextDoc(), iter2.nextDoc());
+      } else {
+        int target = iter1.docID() + TestUtil.nextInt(random(), 1, 100);
+        assertEquals(iter1.advance(target), iter2.advance(target));
       }
     }
-    
-    multi = MultiDocValues.getDocsWithField(ir, "numbersAlways");
-    single = merged.getDocsWithField("numbersAlways");
-    assertEquals(single.length(), multi.length());
-    for (int i = 0; i < numDocs; i++) {
-      assertEquals(single.get(i), multi.get(i));
-    }
-    ir.close();
-    ir2.close();
-    dir.close();
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestNorms.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestNorms.java b/lucene/core/src/test/org/apache/lucene/index/TestNorms.java
index ae35963..a51f1d9 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestNorms.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestNorms.java
@@ -94,12 +94,14 @@ public class TestNorms extends LuceneTestCase {
     
     NumericDocValues fooNorms = MultiDocValues.getNormValues(reader, "foo");
     for (int i = 0; i < reader.maxDoc(); i++) {
-      assertEquals(0, fooNorms.get(i));
+      assertEquals(i, fooNorms.nextDoc());
+      assertEquals(0, fooNorms.longValue());
     }
     
     NumericDocValues barNorms = MultiDocValues.getNormValues(reader, "bar");
     for (int i = 0; i < reader.maxDoc(); i++) {
-      assertEquals(1, barNorms.get(i));
+      assertEquals(i, barNorms.nextDoc());
+      assertEquals(1, barNorms.longValue());
     }
     
     reader.close();
@@ -115,7 +117,8 @@ public class TestNorms extends LuceneTestCase {
     for (int i = 0; i < open.maxDoc(); i++) {
       Document document = open.document(i);
       int expected = Integer.parseInt(document.get(byteTestField));
-      assertEquals(expected, normValues.get(i));
+      assertEquals(i, normValues.nextDoc());
+      assertEquals(expected, normValues.longValue());
     }
     open.close();
     dir.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java b/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
index 219dd05..94da587 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
@@ -221,8 +221,10 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     assertEquals(1, reader.leaves().size());
     LeafReader r = reader.leaves().get(0).reader();
     NumericDocValues ndv = r.getNumericDocValues("val");
-    assertEquals(2, ndv.get(0));
-    assertEquals(2, ndv.get(1));
+    assertEquals(0, ndv.nextDoc());
+    assertEquals(2, ndv.longValue());
+    assertEquals(1, ndv.nextDoc());
+    assertEquals(2, ndv.longValue());
     reader.close();
     
     dir.close();
@@ -267,7 +269,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
       assertNotNull(ndv);
       for (int i = 0; i < r.maxDoc(); i++) {
         long expected = expectedValues[i + context.docBase];
-        long actual = ndv.get(i);
+        assertEquals(i, ndv.nextDoc());
+        long actual = ndv.longValue();
         assertEquals(expected, actual);
       }
     }
@@ -303,9 +306,13 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     final DirectoryReader reader2 = DirectoryReader.openIfChanged(reader1);
     assertNotNull(reader2);
     assertTrue(reader1 != reader2);
+    NumericDocValues dvs1 = reader1.leaves().get(0).reader().getNumericDocValues("val");
+    assertEquals(0, dvs1.nextDoc());
+    assertEquals(1, dvs1.longValue());
 
-    assertEquals(1, reader1.leaves().get(0).reader().getNumericDocValues("val").get(0));
-    assertEquals(10, reader2.leaves().get(0).reader().getNumericDocValues("val").get(0));
+    NumericDocValues dvs2 = reader2.leaves().get(0).reader().getNumericDocValues("val");
+    assertEquals(0, dvs2.nextDoc());
+    assertEquals(10, dvs2.longValue());
 
     writer.close();
     IOUtils.close(reader1, reader2, dir);
@@ -353,7 +360,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     long[] expectedValues = new long[] { 1, 2, 3, 17, 5, 17};
     NumericDocValues ndv = MultiDocValues.getNumericValues(reader, "val");
     for (int i = 0; i < expectedValues.length; i++) {
-      assertEquals(expectedValues[i], ndv.get(i));
+      assertEquals(i, ndv.nextDoc());
+      assertEquals(expectedValues[i], ndv.longValue());
     }
     
     reader.close();
@@ -389,7 +397,9 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     
     LeafReader r = reader.leaves().get(0).reader();
     assertFalse(r.getLiveDocs().get(0));
-    assertEquals(17, r.getNumericDocValues("val").get(1));
+    NumericDocValues values = r.getNumericDocValues("val");
+    assertEquals(1, values.advance(1));
+    assertEquals(17, values.longValue());
     
     reader.close();
     dir.close();
@@ -425,12 +435,16 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     SortedDocValues sdv = r.getSortedDocValues("sdv");
     SortedSetDocValues ssdv = r.getSortedSetDocValues("ssdv");
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(17, ndv.get(i));
-      BytesRef term = bdv.get(i);
+      assertEquals(i, ndv.nextDoc());
+      assertEquals(17, ndv.longValue());
+      assertEquals(i, bdv.nextDoc());
+      BytesRef term = bdv.binaryValue();
       assertEquals(new BytesRef(Integer.toString(i)), term);
-      term = sdv.get(i);
+      assertEquals(i, sdv.nextDoc());
+      term = sdv.binaryValue();
       assertEquals(new BytesRef(Integer.toString(i)), term);
-      ssdv.setDocument(i);
+      assertEquals(i, ssdv.nextDoc());
+
       long ord = ssdv.nextOrd();
       term = ssdv.lookupOrd(ord);
       assertEquals(i, Integer.parseInt(term.utf8ToString()));
@@ -471,8 +485,10 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     NumericDocValues ndv1 = r.getNumericDocValues("ndv1");
     NumericDocValues ndv2 = r.getNumericDocValues("ndv2");
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(17, ndv1.get(i));
-      assertEquals(i, ndv2.get(i));
+      assertEquals(i, ndv1.nextDoc());
+      assertEquals(17, ndv1.longValue());
+      assertEquals(i, ndv2.nextDoc());
+      assertEquals(i, ndv2.longValue());
     }
     
     reader.close();
@@ -503,7 +519,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     LeafReader r = reader.leaves().get(0).reader();
     NumericDocValues ndv = r.getNumericDocValues("ndv");
     for (int i = 0; i < r.maxDoc(); i++) {
-      assertEquals(17, ndv.get(i));
+      assertEquals(i, ndv.nextDoc());
+      assertEquals(17, ndv.longValue());
     }
     
     reader.close();
@@ -567,8 +584,10 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     NumericDocValues ndv = MultiDocValues.getNumericValues(reader, "ndv");
     SortedDocValues sdv = MultiDocValues.getSortedValues(reader, "sorted");
     for (int i = 0; i < reader.maxDoc(); i++) {
-      assertEquals(17, ndv.get(i));
-      final BytesRef term = sdv.get(i);
+      assertEquals(i, ndv.nextDoc());
+      assertEquals(17, ndv.longValue());
+      assertEquals(i, sdv.nextDoc());
+      final BytesRef term = sdv.binaryValue();
       assertEquals(new BytesRef("value"), term);
     }
     
@@ -596,7 +615,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     final DirectoryReader reader = DirectoryReader.open(dir);
     NumericDocValues ndv = MultiDocValues.getNumericValues(reader, "ndv");
     for (int i = 0; i < reader.maxDoc(); i++) {
-      assertEquals(3, ndv.get(i));
+      assertEquals(i, ndv.nextDoc());
+      assertEquals(3, ndv.longValue());
     }
     reader.close();
     dir.close();
@@ -665,7 +685,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
       NumericDocValues ndv = r.getNumericDocValues("ndv");
       assertNotNull(ndv);
       for (int i = 0; i < r.maxDoc(); i++) {
-        assertEquals(value, ndv.get(i));
+        assertEquals(i, ndv.nextDoc());
+        assertEquals(value, ndv.longValue());
       }
       reader.close();
     }
@@ -696,7 +717,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     final DirectoryReader reader = DirectoryReader.open(dir);
     NumericDocValues ndv = MultiDocValues.getNumericValues(reader, "ndv");
     for (int i = 0; i < reader.maxDoc(); i++) {
-      assertEquals(3, ndv.get(i));
+      assertEquals(i, ndv.nextDoc());
+      assertEquals(3, ndv.longValue());
     }
     reader.close();
     dir.close();
@@ -774,14 +796,13 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
         for (int field = 0; field < fieldValues.length; field++) {
           String f = "f" + field;
           NumericDocValues ndv = r.getNumericDocValues(f);
-          Bits docsWithField = r.getDocsWithField(f);
           assertNotNull(ndv);
           int maxDoc = r.maxDoc();
           for (int doc = 0; doc < maxDoc; doc++) {
             if (liveDocs == null || liveDocs.get(doc)) {
 //              System.out.println("doc=" + (doc + context.docBase) + " f='" + f + "' vslue=" + ndv.get(doc));
-              assertTrue(docsWithField.get(doc));
-              assertEquals("invalid value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], ndv.get(doc));
+              assertEquals(doc, ndv.advance(doc));
+              assertEquals("invalid value for doc=" + doc + ", field=" + f + ", reader=" + r, fieldValues[field], ndv.longValue());
             }
           }
         }
@@ -835,12 +856,10 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     for (LeafReaderContext context : reader.leaves()) {
       LeafReader r = context.reader();
       NumericDocValues ndv = r.getNumericDocValues("ndv");
-      Bits docsWithField = r.getDocsWithField("ndv");
-      assertNotNull(docsWithField);
-      assertTrue(docsWithField.get(0));
-      assertEquals(5L, ndv.get(0));
-      assertFalse(docsWithField.get(1));
-      assertEquals(0L, ndv.get(1));
+      assertEquals(0, ndv.nextDoc());
+      assertEquals(5L, ndv.longValue());
+      // docID 1 has no ndv value
+      assertTrue(ndv.nextDoc() > 1);
     }
     reader.close();
 
@@ -890,12 +909,9 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     for (LeafReaderContext context : reader.leaves()) {
       LeafReader r = context.reader();
       NumericDocValues ndv = r.getNumericDocValues("ndv");
-      Bits docsWithField = r.getDocsWithField("ndv");
-      assertNotNull(docsWithField);
-      assertTrue(docsWithField.get(0));
-      assertEquals(5L, ndv.get(0));
-      assertFalse(docsWithField.get(1));
-      assertEquals(0L, ndv.get(1));
+      assertEquals(0, ndv.nextDoc());
+      assertEquals(5L, ndv.longValue());
+      assertTrue(ndv.nextDoc() > 1);
     }
     reader.close();
     
@@ -967,7 +983,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
       LeafReader r = context.reader();
       NumericDocValues ndv = r.getNumericDocValues("ndv");
       for (int i = 0; i < r.maxDoc(); i++) {
-        assertEquals(5L, ndv.get(i));
+        assertEquals(i, ndv.nextDoc());
+        assertEquals(5L, ndv.longValue());
       }
     }
     reader.close();
@@ -993,7 +1010,8 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     
     DirectoryReader r = DirectoryReader.open(dir);
     NumericDocValues ndv = r.leaves().get(0).reader().getNumericDocValues("f");
-    assertEquals(17, ndv.get(0));
+    assertEquals(0, ndv.nextDoc());
+    assertEquals(17, ndv.longValue());
     r.close();
     
     dir.close();
@@ -1111,14 +1129,12 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
       for (int i = 0; i < numFields; i++) {
         NumericDocValues ndv = r.getNumericDocValues("f" + i);
         NumericDocValues control = r.getNumericDocValues("cf" + i);
-        Bits docsWithNdv = r.getDocsWithField("f" + i);
-        Bits docsWithControl = r.getDocsWithField("cf" + i);
         Bits liveDocs = r.getLiveDocs();
         for (int j = 0; j < r.maxDoc(); j++) {
           if (liveDocs == null || liveDocs.get(j)) {
-            assertTrue(docsWithNdv.get(j));
-            assertTrue(docsWithControl.get(j));
-            assertEquals(control.get(j), ndv.get(j) * 2);
+            assertEquals(j, ndv.advance(j));
+            assertEquals(j, control.advance(j));
+            assertEquals(control.longValue(), ndv.longValue() * 2);
           }
         }
       }
@@ -1157,7 +1173,9 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
         NumericDocValues fndv = r.getNumericDocValues("f");
         NumericDocValues cfndv = r.getNumericDocValues("cf");
         for (int j = 0; j < r.maxDoc(); j++) {
-          assertEquals(cfndv.get(j), fndv.get(j) * 2);
+          assertEquals(j, fndv.nextDoc());
+          assertEquals(j, cfndv.nextDoc());
+          assertEquals(cfndv.longValue(), fndv.longValue() * 2);
         }
       }
       reader.close();
@@ -1206,10 +1224,14 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     DirectoryReader reader = DirectoryReader.open(dir);
     NumericDocValues f1 = MultiDocValues.getNumericValues(reader, "f1");
     NumericDocValues f2 = MultiDocValues.getNumericValues(reader, "f2");
-    assertEquals(12L, f1.get(0));
-    assertEquals(13L, f2.get(0));
-    assertEquals(17L, f1.get(1));
-    assertEquals(2L, f2.get(1));
+    assertEquals(0, f1.nextDoc());
+    assertEquals(12L, f1.longValue());
+    assertEquals(0, f2.nextDoc());
+    assertEquals(13L, f2.longValue());
+    assertEquals(1, f1.nextDoc());
+    assertEquals(17L, f1.longValue());
+    assertEquals(1, f2.nextDoc());
+    assertEquals(2L, f2.longValue());
     reader.close();
     dir.close();
   }
@@ -1264,7 +1286,9 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
       NumericDocValues ndv = r.getNumericDocValues("ndv");
       NumericDocValues control = r.getNumericDocValues("control");
       for (int i = 0; i < r.maxDoc(); i++) {
-        assertEquals(ndv.get(i)*2, control.get(i));
+        assertEquals(i, ndv.nextDoc());
+        assertEquals(i, control.nextDoc());
+        assertEquals(ndv.longValue()*2, control.longValue());
       }
     }
     reader.close();
@@ -1361,7 +1385,9 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
         NumericDocValues f = r.getNumericDocValues("f" + i);
         NumericDocValues cf = r.getNumericDocValues("cf" + i);
         for (int j = 0; j < r.maxDoc(); j++) {
-          assertEquals("reader=" + r + ", field=f" + i + ", doc=" + j, cf.get(j), f.get(j) * 2);
+          assertEquals(j, f.nextDoc());
+          assertEquals(j, cf.nextDoc());
+          assertEquals("reader=" + r + ", field=f" + i + ", doc=" + j, cf.longValue(), f.longValue() * 2);
         }
       }
     }
@@ -1390,8 +1416,12 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     writer.close();
     
     DirectoryReader reader = DirectoryReader.open(dir);
-    assertEquals(4, reader.leaves().get(0).reader().getNumericDocValues("f1").get(0));
-    assertEquals(3, reader.leaves().get(0).reader().getNumericDocValues("f2").get(0));
+    NumericDocValues dvs = reader.leaves().get(0).reader().getNumericDocValues("f1");
+    assertEquals(0, dvs.nextDoc());
+    assertEquals(4, dvs.longValue());
+    dvs = reader.leaves().get(0).reader().getNumericDocValues("f2");
+    assertEquals(0, dvs.nextDoc());
+    assertEquals(3, dvs.longValue());
     reader.close();
     
     dir.close();
@@ -1416,7 +1446,10 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     
     DirectoryReader reader = DirectoryReader.open(dir);
     assertEquals(1, reader.leaves().size());
-    assertEquals(2L, reader.leaves().get(0).reader().getNumericDocValues("f1").get(0));
+    NumericDocValues dvs = reader.leaves().get(0).reader().getNumericDocValues("f1");
+    assertEquals(0, dvs.nextDoc());
+    assertEquals(2, dvs.longValue());
+    
     reader.close();
     
     dir.close();
@@ -1439,7 +1472,9 @@ public class TestNumericDocValuesUpdates extends LuceneTestCase {
     
     DirectoryReader reader = DirectoryReader.open(dir);
     assertEquals(1, reader.leaves().size());
-    assertEquals(1L, reader.leaves().get(0).reader().getNumericDocValues("f1").get(0));
+    NumericDocValues dvs = reader.leaves().get(0).reader().getNumericDocValues("f1");
+    assertEquals(0, dvs.nextDoc());
+    assertEquals(1, dvs.longValue());
     reader.close();
     
     dir.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestOmitNorms.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestOmitNorms.java b/lucene/core/src/test/org/apache/lucene/index/TestOmitNorms.java
index bc3c3e8..bee1720 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestOmitNorms.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestOmitNorms.java
@@ -29,6 +29,8 @@ import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.TestUtil;
 
+import static org.apache.lucene.search.DocIdSetIterator.NO_MORE_DOCS;
+
 public class TestOmitNorms extends LuceneTestCase {
   // Tests whether the DocumentWriter correctly enable the
   // omitNorms bit in the FieldInfo
@@ -302,8 +304,21 @@ public class TestOmitNorms extends LuceneTestCase {
     if (norms1 == null) {
       assertNull(norms2);
     } else {
-      for(int docID=0;docID<ir1.maxDoc();docID++) {
-        assertEquals(norms1.get(docID), norms2.get(docID));
+      while (true) {
+        int norms1DocID = norms1.nextDoc();
+        int norms2DocID = norms2.nextDoc();
+        while (norms1DocID < norms2DocID) {
+          assertEquals(0, norms1.longValue());
+          norms1DocID = norms1.nextDoc();
+        }
+        while (norms2DocID < norms1DocID) {
+          assertEquals(0, norms2.longValue());
+          norms2DocID = norms2.nextDoc();
+        }
+        if (norms1.docID() == NO_MORE_DOCS) {
+          break;
+        }
+        assertEquals(norms1.longValue(), norms2.longValue());
       }
     }
     ir1.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestOrdinalMap.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestOrdinalMap.java b/lucene/core/src/test/org/apache/lucene/index/TestOrdinalMap.java
index 1f9ff11..921102d6 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestOrdinalMap.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestOrdinalMap.java
@@ -25,8 +25,6 @@ import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.SortedDocValuesField;
 import org.apache.lucene.document.SortedSetDocValuesField;
-import org.apache.lucene.index.MultiDocValues.MultiSortedDocValues;
-import org.apache.lucene.index.MultiDocValues.MultiSortedSetDocValues;
 import org.apache.lucene.index.MultiDocValues.OrdinalMap;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.BytesRef;
@@ -84,13 +82,13 @@ public class TestOrdinalMap extends LuceneTestCase {
     iw.commit();
     DirectoryReader r = iw.getReader();
     SortedDocValues sdv = MultiDocValues.getSortedValues(r, "sdv");
-    if (sdv instanceof MultiSortedDocValues) {
-      OrdinalMap map = ((MultiSortedDocValues) sdv).mapping;
+    if (sdv instanceof MultiDocValues.MultiSortedDocValues) {
+      OrdinalMap map = ((MultiDocValues.MultiSortedDocValues) sdv).mapping;
       assertEquals(RamUsageTester.sizeOf(map, ORDINAL_MAP_ACCUMULATOR), map.ramBytesUsed());
     }
     SortedSetDocValues ssdv = MultiDocValues.getSortedSetValues(r, "ssdv");
-    if (ssdv instanceof MultiSortedSetDocValues) {
-      OrdinalMap map = ((MultiSortedSetDocValues) ssdv).mapping;
+    if (ssdv instanceof MultiDocValues.MultiSortedSetDocValues) {
+      OrdinalMap map = ((MultiDocValues.MultiSortedSetDocValues) ssdv).mapping;
       assertEquals(RamUsageTester.sizeOf(map, ORDINAL_MAP_ACCUMULATOR), map.ramBytesUsed());
     }
     iw.close();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestPostingsOffsets.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestPostingsOffsets.java b/lucene/core/src/test/org/apache/lucene/index/TestPostingsOffsets.java
index b21cb23..c265d92 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestPostingsOffsets.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestPostingsOffsets.java
@@ -295,7 +295,13 @@ public class TestPostingsOffsets extends LuceneTestCase {
       PostingsEnum docs = null;
       PostingsEnum docsAndPositions = null;
       PostingsEnum docsAndPositionsAndOffsets = null;
-      final NumericDocValues docIDToID = DocValues.getNumeric(sub, "id");
+      int[] docIDToID = new int[sub.maxDoc()];
+      NumericDocValues values = DocValues.getNumeric(sub, "id");
+      for(int i=0;i<sub.maxDoc();i++) {
+        assertEquals(i, values.nextDoc());
+        docIDToID[i] = (int) values.longValue();
+      }
+      
       for(String term : terms) {
         //System.out.println("  term=" + term);
         if (termsEnum.seekExact(new BytesRef(term))) {
@@ -304,8 +310,8 @@ public class TestPostingsOffsets extends LuceneTestCase {
           int doc;
           //System.out.println("    doc/freq");
           while((doc = docs.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
-            final List<Token> expected = actualTokens.get(term).get((int) docIDToID.get(doc));
-            //System.out.println("      doc=" + docIDToID.get(doc) + " docID=" + doc + " " + expected.size() + " freq");
+            final List<Token> expected = actualTokens.get(term).get(docIDToID[doc]);
+            //System.out.println("      doc=" + docIDToID[doc] + " docID=" + doc + " " + expected.size() + " freq");
             assertNotNull(expected);
             assertEquals(expected.size(), docs.freq());
           }
@@ -315,8 +321,8 @@ public class TestPostingsOffsets extends LuceneTestCase {
           assertNotNull(docsAndPositions);
           //System.out.println("    doc/freq/pos");
           while((doc = docsAndPositions.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
-            final List<Token> expected = actualTokens.get(term).get((int) docIDToID.get(doc));
-            //System.out.println("      doc=" + docIDToID.get(doc) + " " + expected.size() + " freq");
+            final List<Token> expected = actualTokens.get(term).get(docIDToID[doc]);
+            //System.out.println("      doc=" + docIDToID[doc] + " " + expected.size() + " freq");
             assertNotNull(expected);
             assertEquals(expected.size(), docsAndPositions.freq());
             for(Token token : expected) {
@@ -330,8 +336,8 @@ public class TestPostingsOffsets extends LuceneTestCase {
           assertNotNull(docsAndPositionsAndOffsets);
           //System.out.println("    doc/freq/pos/offs");
           while((doc = docsAndPositionsAndOffsets.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
-            final List<Token> expected = actualTokens.get(term).get((int) docIDToID.get(doc));
-            //System.out.println("      doc=" + docIDToID.get(doc) + " " + expected.size() + " freq");
+            final List<Token> expected = actualTokens.get(term).get(docIDToID[doc]);
+            //System.out.println("      doc=" + docIDToID[doc] + " " + expected.size() + " freq");
             assertNotNull(expected);
             assertEquals(expected.size(), docsAndPositionsAndOffsets.freq());
             for(Token token : expected) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestTermsEnum.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestTermsEnum.java b/lucene/core/src/test/org/apache/lucene/index/TestTermsEnum.java
index b074f81..6015fbc 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestTermsEnum.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestTermsEnum.java
@@ -224,7 +224,12 @@ public class TestTermsEnum extends LuceneTestCase {
     final IndexReader r = w.getReader();
     w.close();
 
-    final NumericDocValues docIDToID = MultiDocValues.getNumericValues(r, "id");
+    int[] docIDToID = new int[r.maxDoc()];
+    NumericDocValues values = MultiDocValues.getNumericValues(r, "id");
+    for(int i=0;i<r.maxDoc();i++) {
+      assertEquals(i, values.nextDoc());
+      docIDToID[i] = (int) values.longValue();
+    }
 
     for(int iter=0;iter<10*RANDOM_MULTIPLIER;iter++) {
 
@@ -327,7 +332,7 @@ public class TestTermsEnum extends LuceneTestCase {
           postingsEnum = TestUtil.docs(random(), te, postingsEnum, PostingsEnum.NONE);
           final int docID = postingsEnum.nextDoc();
           assertTrue(docID != DocIdSetIterator.NO_MORE_DOCS);
-          assertEquals(docIDToID.get(docID), termToID.get(expected).intValue());
+          assertEquals(docIDToID[docID], termToID.get(expected).intValue());
           do {
             loc++;
           } while (loc < termsArray.length && !acceptTermsSet.contains(termsArray[loc]));

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/index/TestUniqueTermCount.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestUniqueTermCount.java b/lucene/core/src/test/org/apache/lucene/index/TestUniqueTermCount.java
index b1661ca..ee47fff 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestUniqueTermCount.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestUniqueTermCount.java
@@ -72,7 +72,8 @@ public class TestUniqueTermCount extends LuceneTestCase {
     NumericDocValues fooNorms = MultiDocValues.getNormValues(reader, "foo");
     assertNotNull(fooNorms);
     for (int i = 0; i < reader.maxDoc(); i++) {
-      assertEquals(expected.get(i).longValue(), fooNorms.get(i));
+      assertEquals(i, fooNorms.nextDoc());
+      assertEquals(expected.get(i).longValue(), fooNorms.longValue());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/search/TestDocValuesScoring.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestDocValuesScoring.java b/lucene/core/src/test/org/apache/lucene/search/TestDocValuesScoring.java
index de40c0d..ac35631 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestDocValuesScoring.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestDocValuesScoring.java
@@ -22,10 +22,10 @@ import java.io.IOException;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FloatDocValuesField;
-import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.FieldInvertState;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.Term;
@@ -153,9 +153,25 @@ public class TestDocValuesScoring extends LuceneTestCase {
       final NumericDocValues values = DocValues.getNumeric(context.reader(), boostField);
       
       return new SimScorer() {
+
+        private float getValueForDoc(int doc) throws IOException {
+          int curDocID = values.docID();
+          if (doc < curDocID) {
+            throw new IllegalArgumentException("doc=" + doc + " is before curDocID=" + curDocID);
+          }
+          if (doc > curDocID) {
+            curDocID = values.advance(doc);
+          }
+          if (curDocID == doc) {
+            return Float.intBitsToFloat((int)values.longValue());
+          } else {
+            return 0f;
+          }
+        }
+        
         @Override
-        public float score(int doc, float freq) {
-          return Float.intBitsToFloat((int)values.get(doc)) * sub.score(doc, freq);
+        public float score(int doc, float freq) throws IOException {
+          return getValueForDoc(doc) * sub.score(doc, freq);
         }
         
         @Override
@@ -169,8 +185,8 @@ public class TestDocValuesScoring extends LuceneTestCase {
         }
 
         @Override
-        public Explanation explain(int doc, Explanation freq) {
-          Explanation boostExplanation = Explanation.match(Float.intBitsToFloat((int)values.get(doc)), "indexDocValue(" + boostField + ")");
+        public Explanation explain(int doc, Explanation freq) throws IOException {
+          Explanation boostExplanation = Explanation.match(getValueForDoc(doc), "indexDocValue(" + boostField + ")");
           Explanation simExplanation = sub.explain(doc, freq);
           return Explanation.match(
               boostExplanation.getValue() * simExplanation.getValue(),

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java b/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
index 7fdc367..9ca2302 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java
@@ -151,9 +151,7 @@ class ElevationComparatorSource extends FieldComparatorSource {
      int bottomVal;
 
      @Override
-    public LeafFieldComparator getLeafComparator(LeafReaderContext context)
-        throws IOException {
-      final SortedDocValues idIndex = DocValues.getSorted(context.reader(), fieldname);
+     public LeafFieldComparator getLeafComparator(LeafReaderContext context) throws IOException {
       return new LeafFieldComparator() {
 
         @Override
@@ -166,24 +164,24 @@ class ElevationComparatorSource extends FieldComparatorSource {
           throw new UnsupportedOperationException();
         }
 
-        private int docVal(int doc) {
-          int ord = idIndex.getOrd(doc);
-          if (ord == -1) {
-            return 0;
-          } else {
-            final BytesRef term = idIndex.lookupOrd(ord);
+        private int docVal(int doc) throws IOException {
+          SortedDocValues idIndex = DocValues.getSorted(context.reader(), fieldname);
+          if (idIndex.advance(doc) == doc) {
+            final BytesRef term = idIndex.binaryValue();
             Integer prio = priority.get(term);
             return prio == null ? 0 : prio.intValue();
+          } else {
+            return 0;
           }
         }
 
         @Override
-        public int compareBottom(int doc) {
+        public int compareBottom(int doc) throws IOException {
           return docVal(doc) - bottomVal;
         }
 
         @Override
-        public void copy(int slot, int doc) {
+        public void copy(int slot, int doc) throws IOException {
           values[slot] = docVal(doc);
         }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/core/src/test/org/apache/lucene/search/TestMinShouldMatch2.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestMinShouldMatch2.java b/lucene/core/src/test/org/apache/lucene/search/TestMinShouldMatch2.java
index 19f0be5..b2c21b3 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestMinShouldMatch2.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestMinShouldMatch2.java
@@ -367,7 +367,12 @@ public class TestMinShouldMatch2 extends LuceneTestCase {
           for (currentDoc = currentDoc+1; currentDoc < maxDoc; currentDoc++) {
             currentMatched = 0;
             score = 0;
-            dv.setDocument(currentDoc);
+            if (currentDoc > dv.docID()) {
+              dv.advance(currentDoc);
+            }
+            if (currentDoc != dv.docID()) {
+              continue;
+            }
             long ord;
             while ((ord = dv.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
               if (ords.contains(ord)) {