You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by gs...@apache.org on 2022/06/30 21:01:21 UTC

[lucene] branch main updated: LUCENE-10603: Migrate remaining SSDV iteration to use docValueCount in production code (#995)

This is an automated email from the ASF dual-hosted git repository.

gsmiller pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git


The following commit(s) were added to refs/heads/main by this push:
     new 5f2a4998a07 LUCENE-10603: Migrate remaining SSDV iteration to use docValueCount in production code (#995)
5f2a4998a07 is described below

commit 5f2a4998a079278ada89ce7bfa3992673a91c5c9
Author: Greg Miller <gs...@gmail.com>
AuthorDate: Thu Jun 30 14:01:14 2022 -0700

    LUCENE-10603: Migrate remaining SSDV iteration to use docValueCount in production code (#995)
---
 lucene/CHANGES.txt                                 |  2 +-
 .../lucene80/Lucene80DocValuesConsumer.java        | 18 ++-----
 .../simpletext/SimpleTextDocValuesWriter.java      | 12 ++---
 .../apache/lucene/codecs/DocValuesConsumer.java    |  5 +-
 .../codecs/lucene90/Lucene90DocValuesConsumer.java |  6 +--
 .../document/SortedSetDocValuesRangeQuery.java     |  5 +-
 .../java/org/apache/lucene/index/CheckIndex.java   |  9 +---
 .../lucene/index/SortedSetDocValuesWriter.java     |  9 ++--
 .../lucene/search/DocValuesRewriteMethod.java      |  6 +--
 .../apache/lucene/search/SortedSetSelector.java    | 59 +++++-----------------
 .../search/grouping/TermGroupFacetCollector.java   |  5 +-
 .../apache/lucene/search/join/TermsCollector.java  |  5 +-
 .../search/join/TermsWithScoreCollector.java       | 10 ++--
 .../luke/models/documents/DocValuesAdapter.java    |  5 +-
 .../apache/lucene/misc/search/DocValuesStats.java  |  5 +-
 .../lucene/sandbox/search/DocValuesTermsQuery.java |  6 +--
 .../suggest/analyzing/AnalyzingInfixSuggester.java |  5 +-
 17 files changed, 54 insertions(+), 118 deletions(-)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 26faf461e76..4b86a89b2d7 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -95,7 +95,7 @@ Improvements
 * LUCENE-10585: Facet module code cleanup (copy/paste scrubbing, simplification and some very minor
   optimization tweaks). (Greg Miller)
 
-* LUCENE-10603: Update SortedSetDocValues iteration within faceting implementations to use
+* LUCENE-10603: Update SortedSetDocValues iteration within production code to use
   SortedSetDocValues#docValueCount(). (Greg Miller)
 
 * GITHUB#983: AbstractSortedSetDocValueFacetCounts internal code cleanup/refactoring. (Greg Miller)
diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80DocValuesConsumer.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80DocValuesConsumer.java
index f9a53311189..e7eeb0fa027 100644
--- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80DocValuesConsumer.java
+++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80DocValuesConsumer.java
@@ -959,11 +959,7 @@ final class Lucene80DocValuesConsumer extends DocValuesConsumer {
     long numOrds = 0;
     for (int doc = values.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = values.nextDoc()) {
       numDocsWithField++;
-      for (long ord = values.nextOrd();
-          ord != SortedSetDocValues.NO_MORE_ORDS;
-          ord = values.nextOrd()) {
-        numOrds++;
-      }
+      numOrds += values.docValueCount();
     }
 
     if (numDocsWithField == numOrds) {
@@ -1005,10 +1001,8 @@ final class Lucene80DocValuesConsumer extends DocValuesConsumer {
     LegacyDirectWriter writer = LegacyDirectWriter.getInstance(data, numOrds, numberOfBitsPerOrd);
     values = valuesProducer.getSortedSet(field);
     for (int doc = values.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = values.nextDoc()) {
-      for (long ord = values.nextOrd();
-          ord != SortedSetDocValues.NO_MORE_ORDS;
-          ord = values.nextOrd()) {
-        writer.add(ord);
+      for (int i = 0; i < values.docValueCount(); i++) {
+        writer.add(values.nextOrd());
       }
     }
     writer.finish();
@@ -1026,11 +1020,7 @@ final class Lucene80DocValuesConsumer extends DocValuesConsumer {
     addressesWriter.add(addr);
     values = valuesProducer.getSortedSet(field);
     for (int doc = values.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = values.nextDoc()) {
-      values.nextOrd();
-      addr++;
-      while (values.nextOrd() != SortedSetDocValues.NO_MORE_ORDS) {
-        addr++;
-      }
+      addr += values.docValueCount();
       addressesWriter.add(addr);
     }
     addressesWriter.finish();
diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesWriter.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesWriter.java
index bce8bd03aa1..bd0c307acc6 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesWriter.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesWriter.java
@@ -434,13 +434,11 @@ class SimpleTextDocValuesWriter extends DocValuesConsumer {
     SortedSetDocValues values = valuesProducer.getSortedSet(field);
     for (int doc = values.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = values.nextDoc()) {
       sb2.setLength(0);
-      for (long ord = values.nextOrd();
-          ord != SortedSetDocValues.NO_MORE_ORDS;
-          ord = values.nextOrd()) {
+      for (int i = 0; i < values.docValueCount(); i++) {
         if (sb2.length() > 0) {
           sb2.append(",");
         }
-        sb2.append(Long.toString(ord));
+        sb2.append(Long.toString(values.nextOrd()));
       }
       maxOrdListLength = Math.max(maxOrdListLength, sb2.length());
     }
@@ -490,13 +488,11 @@ class SimpleTextDocValuesWriter extends DocValuesConsumer {
       }
       sb2.setLength(0);
       if (values.docID() == i) {
-        for (long ord = values.nextOrd();
-            ord != SortedSetDocValues.NO_MORE_ORDS;
-            ord = values.nextOrd()) {
+        for (int j = 0; j < values.docValueCount(); j++) {
           if (sb2.length() > 0) {
             sb2.append(",");
           }
-          sb2.append(Long.toString(ord));
+          sb2.append(Long.toString(values.nextOrd()));
         }
       }
       // now pad to fit: these are numbers so spaces work well. reader calls trim()
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java
index 5e24cf43b3c..8795d52fe1b 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java
@@ -836,9 +836,8 @@ public abstract class DocValuesConsumer implements Closeable {
         int docID;
         while ((docID = dv.nextDoc()) != NO_MORE_DOCS) {
           if (liveDocs.get(docID)) {
-            long ord;
-            while ((ord = dv.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-              bitset.set(ord);
+            for (int i = 0; i < dv.docValueCount(); i++) {
+              bitset.set(dv.nextOrd());
             }
           }
         }
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesConsumer.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesConsumer.java
index 494d0edc3bc..60f566a888d 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesConsumer.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesConsumer.java
@@ -739,9 +739,9 @@ final class Lucene90DocValuesConsumer extends DocValuesConsumer {
 
     assert values.docID() == -1;
     for (int doc = values.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = values.nextDoc()) {
-      final long firstOrd = values.nextOrd();
-      assert firstOrd != SortedSetDocValues.NO_MORE_ORDS;
-      if (values.nextOrd() != SortedSetDocValues.NO_MORE_ORDS) {
+      int docValueCount = values.docValueCount();
+      assert docValueCount > 0;
+      if (docValueCount > 1) {
         return false;
       }
     }
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesRangeQuery.java b/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesRangeQuery.java
index d14784186b1..776ef988f28 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesRangeQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesRangeQuery.java
@@ -176,9 +176,8 @@ abstract class SortedSetDocValuesRangeQuery extends Query {
               new TwoPhaseIterator(values) {
                 @Override
                 public boolean matches() throws IOException {
-                  for (long ord = values.nextOrd();
-                      ord != SortedSetDocValues.NO_MORE_ORDS;
-                      ord = values.nextOrd()) {
+                  for (int i = 0; i < values.docValueCount(); i++) {
+                    long ord = values.nextOrd();
                     if (ord < minOrd) {
                       continue;
                     }
diff --git a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
index 83b31ea1ece..193cb4f2687 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
@@ -3354,9 +3354,8 @@ public final class CheckIndex implements Closeable {
             "advanceExact reports different value count: " + count + " != " + count2);
       }
       long lastOrd = -1;
-      long ord;
       int ordCount = 0;
-      while ((ord = dv.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
+      for (int i = 0; i < count; i++) {
         if (count != dv.docValueCount()) {
           throw new CheckIndexException(
               "value count changed from "
@@ -3365,6 +3364,7 @@ public final class CheckIndex implements Closeable {
                   + dv.docValueCount()
                   + " during iterating over all values");
         }
+        long ord = dv.nextOrd();
         long ord2 = dv2.nextOrd();
         if (ord != ord2) {
           throw new CheckIndexException(
@@ -3393,11 +3393,6 @@ public final class CheckIndex implements Closeable {
         throw new CheckIndexException(
             "dv for field: " + fieldName + " returned docID=" + docID + " yet has no ordinals");
       }
-      long ord2 = dv2.nextOrd();
-      if (ord != ord2) {
-        throw new CheckIndexException(
-            "nextDoc and advanceExact report different ords: " + ord + " != " + ord2);
-      }
     }
     if (maxOrd != maxOrd2) {
       throw new CheckIndexException(
diff --git a/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValuesWriter.java b/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValuesWriter.java
index fedc0bf6b3b..8b0fadafc7f 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValuesWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SortedSetDocValuesWriter.java
@@ -16,7 +16,6 @@
  */
 package org.apache.lucene.index;
 
-import static org.apache.lucene.index.SortedSetDocValues.NO_MORE_ORDS;
 import static org.apache.lucene.search.DocIdSetIterator.NO_MORE_DOCS;
 import static org.apache.lucene.util.ByteBlockPool.BYTE_BLOCK_SIZE;
 
@@ -450,10 +449,10 @@ class SortedSetDocValuesWriter extends DocValuesWriter<SortedSetDocValues> {
       while ((docID = oldValues.nextDoc()) != NO_MORE_DOCS) {
         int newDocID = sortMap.oldToNew(docID);
         long startOffset = ordOffset;
-        long ord;
-        while ((ord = oldValues.nextOrd()) != NO_MORE_ORDS) {
-          builder.add(ord);
-          ordOffset++;
+        int docValueCount = oldValues.docValueCount();
+        ordOffset += docValueCount;
+        for (int i = 0; i < docValueCount; i++) {
+          builder.add(oldValues.nextOrd());
         }
         docValueCounts.set(newDocID, ordOffset - startOffset);
         if (startOffset != ordOffset) { // do we have any values?
diff --git a/lucene/core/src/java/org/apache/lucene/search/DocValuesRewriteMethod.java b/lucene/core/src/java/org/apache/lucene/search/DocValuesRewriteMethod.java
index f1dadb5c7c7..51d0dd7078c 100644
--- a/lucene/core/src/java/org/apache/lucene/search/DocValuesRewriteMethod.java
+++ b/lucene/core/src/java/org/apache/lucene/search/DocValuesRewriteMethod.java
@@ -169,10 +169,8 @@ public final class DocValuesRewriteMethod extends MultiTermQuery.RewriteMethod {
 
                 @Override
                 public boolean matches() throws IOException {
-                  for (long ord = fcsi.nextOrd();
-                      ord != SortedSetDocValues.NO_MORE_ORDS;
-                      ord = fcsi.nextOrd()) {
-                    if (termSet.get(ord)) {
+                  for (int i = 0; i < fcsi.docValueCount(); i++) {
+                    if (termSet.get(fcsi.nextOrd())) {
                       return true;
                     }
                   }
diff --git a/lucene/core/src/java/org/apache/lucene/search/SortedSetSelector.java b/lucene/core/src/java/org/apache/lucene/search/SortedSetSelector.java
index 6f96ab87347..fcf5fba2d8a 100644
--- a/lucene/core/src/java/org/apache/lucene/search/SortedSetSelector.java
+++ b/lucene/core/src/java/org/apache/lucene/search/SortedSetSelector.java
@@ -22,7 +22,6 @@ import java.io.IOException;
 import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.SortedDocValues;
 import org.apache.lucene.index.SortedSetDocValues;
-import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.BytesRef;
 
 /** Selects a value from the document's set to use as the representative value */
@@ -226,13 +225,11 @@ public class SortedSetSelector {
 
     private void setOrd() throws IOException {
       if (docID() != NO_MORE_DOCS) {
-        while (true) {
-          long nextOrd = in.nextOrd();
-          if (nextOrd == NO_MORE_ORDS) {
-            break;
-          }
-          ord = (int) nextOrd;
+        int docValueCount = in.docValueCount();
+        for (int i = 0; i < docValueCount - 1; i++) {
+          in.nextOrd();
         }
+        ord = (int) in.nextOrd();
       } else {
         ord = (int) NO_MORE_ORDS;
       }
@@ -243,7 +240,6 @@ public class SortedSetSelector {
   static class MiddleMinValue extends SortedDocValues {
     final SortedSetDocValues in;
     private int ord;
-    private int[] ords = new int[8];
 
     MiddleMinValue(SortedSetDocValues in) {
       this.in = in;
@@ -304,25 +300,12 @@ public class SortedSetSelector {
 
     private void setOrd() throws IOException {
       if (docID() != NO_MORE_DOCS) {
-        int upto = 0;
-        while (true) {
-          long nextOrd = in.nextOrd();
-          if (nextOrd == NO_MORE_ORDS) {
-            break;
-          }
-          if (upto == ords.length) {
-            ords = ArrayUtil.grow(ords);
-          }
-          ords[upto++] = (int) nextOrd;
-        }
-
-        if (upto == 0) {
-          // iterator should not have returned this docID if it has no ords:
-          assert false;
-          ord = (int) NO_MORE_ORDS;
-        } else {
-          ord = ords[(upto - 1) >>> 1];
+        int docValueCount = in.docValueCount();
+        int targetIdx = (docValueCount - 1) >>> 1;
+        for (int i = 0; i < targetIdx; i++) {
+          in.nextOrd();
         }
+        ord = (int) in.nextOrd();
       } else {
         ord = (int) NO_MORE_ORDS;
       }
@@ -333,7 +316,6 @@ public class SortedSetSelector {
   static class MiddleMaxValue extends SortedDocValues {
     final SortedSetDocValues in;
     private int ord;
-    private int[] ords = new int[8];
 
     MiddleMaxValue(SortedSetDocValues in) {
       this.in = in;
@@ -394,25 +376,12 @@ public class SortedSetSelector {
 
     private void setOrd() throws IOException {
       if (docID() != NO_MORE_DOCS) {
-        int upto = 0;
-        while (true) {
-          long nextOrd = in.nextOrd();
-          if (nextOrd == NO_MORE_ORDS) {
-            break;
-          }
-          if (upto == ords.length) {
-            ords = ArrayUtil.grow(ords);
-          }
-          ords[upto++] = (int) nextOrd;
-        }
-
-        if (upto == 0) {
-          // iterator should not have returned this docID if it has no ords:
-          assert false;
-          ord = (int) NO_MORE_ORDS;
-        } else {
-          ord = ords[upto >>> 1];
+        int docValueCount = in.docValueCount();
+        int targetIdx = docValueCount >>> 1;
+        for (int i = 0; i < targetIdx; i++) {
+          in.nextOrd();
         }
+        ord = (int) in.nextOrd();
       } else {
         ord = (int) NO_MORE_ORDS;
       }
diff --git a/lucene/grouping/src/java/org/apache/lucene/search/grouping/TermGroupFacetCollector.java b/lucene/grouping/src/java/org/apache/lucene/search/grouping/TermGroupFacetCollector.java
index 96c948db872..c1b49758b13 100644
--- a/lucene/grouping/src/java/org/apache/lucene/search/grouping/TermGroupFacetCollector.java
+++ b/lucene/grouping/src/java/org/apache/lucene/search/grouping/TermGroupFacetCollector.java
@@ -275,9 +275,8 @@ public abstract class TermGroupFacetCollector extends GroupFacetCollector {
       }
       boolean empty = true;
       if (doc == facetFieldDocTermOrds.docID()) {
-        long ord;
-        while ((ord = facetFieldDocTermOrds.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-          process(groupOrd, (int) ord);
+        for (int i = 0; i < facetFieldDocTermOrds.docValueCount(); i++) {
+          process(groupOrd, (int) facetFieldDocTermOrds.nextOrd());
           empty = false;
         }
       }
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java b/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java
index de859374a82..cf3561e6b2e 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java
@@ -62,13 +62,12 @@ abstract class TermsCollector<DV> extends DocValuesTermsCollector<DV> {
 
     @Override
     public void collect(int doc) throws IOException {
-      long ord;
       if (doc > docValues.docID()) {
         docValues.advance(doc);
       }
       if (doc == docValues.docID()) {
-        while ((ord = docValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-          final BytesRef term = docValues.lookupOrd(ord);
+        for (int i = 0; i < docValues.docValueCount(); i++) {
+          final BytesRef term = docValues.lookupOrd(docValues.nextOrd());
           collectorTerms.add(term);
         }
       }
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java b/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java
index 00559d2f6ed..84252a7b15a 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java
@@ -213,9 +213,8 @@ abstract class TermsWithScoreCollector<DV> extends DocValuesTermsCollector<DV>
     @Override
     public void collect(int doc) throws IOException {
       if (docValues.advanceExact(doc)) {
-        long ord;
-        while ((ord = docValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-          int termID = collectedTerms.add(docValues.lookupOrd(ord));
+        for (int i = 0; i < docValues.docValueCount(); i++) {
+          int termID = collectedTerms.add(docValues.lookupOrd(docValues.nextOrd()));
           if (termID < 0) {
             termID = -termID - 1;
           } else {
@@ -260,9 +259,8 @@ abstract class TermsWithScoreCollector<DV> extends DocValuesTermsCollector<DV>
       @Override
       public void collect(int doc) throws IOException {
         if (docValues.advanceExact(doc)) {
-          long ord;
-          while ((ord = docValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-            int termID = collectedTerms.add(docValues.lookupOrd(ord));
+          for (int i = 0; i < docValues.docValueCount(); i++) {
+            int termID = collectedTerms.add(docValues.lookupOrd(docValues.nextOrd()));
             if (termID < 0) {
               termID = -termID - 1;
             } else {
diff --git a/lucene/luke/src/java/org/apache/lucene/luke/models/documents/DocValuesAdapter.java b/lucene/luke/src/java/org/apache/lucene/luke/models/documents/DocValuesAdapter.java
index a61b72950c6..251a9375142 100644
--- a/lucene/luke/src/java/org/apache/lucene/luke/models/documents/DocValuesAdapter.java
+++ b/lucene/luke/src/java/org/apache/lucene/luke/models/documents/DocValuesAdapter.java
@@ -143,9 +143,8 @@ final class DocValuesAdapter {
     if (ssvalues.advanceExact(docid)) {
       List<BytesRef> values = new ArrayList<>();
 
-      long ord;
-      while ((ord = ssvalues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-        values.add(BytesRef.deepCopyOf(ssvalues.lookupOrd(ord)));
+      for (int i = 0; i < ssvalues.docValueCount(); i++) {
+        values.add(BytesRef.deepCopyOf(ssvalues.lookupOrd(ssvalues.nextOrd())));
       }
 
       DocValues dv = DocValues.of(dvType, values, Collections.emptyList());
diff --git a/lucene/misc/src/java/org/apache/lucene/misc/search/DocValuesStats.java b/lucene/misc/src/java/org/apache/lucene/misc/search/DocValuesStats.java
index 55b04327b3d..88053685878 100644
--- a/lucene/misc/src/java/org/apache/lucene/misc/search/DocValuesStats.java
+++ b/lucene/misc/src/java/org/apache/lucene/misc/search/DocValuesStats.java
@@ -403,9 +403,8 @@ public abstract class DocValuesStats<T> {
 
     @Override
     protected void doAccumulate(int count) throws IOException {
-      long ord;
-      while ((ord = ssdv.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-        BytesRef val = ssdv.lookupOrd(ord);
+      for (int i = 0; i < ssdv.docValueCount(); i++) {
+        BytesRef val = ssdv.lookupOrd(ssdv.nextOrd());
         if (max == null || val.compareTo(max) > 0) {
           max = copyFrom(val, max);
         }
diff --git a/lucene/sandbox/src/java/org/apache/lucene/sandbox/search/DocValuesTermsQuery.java b/lucene/sandbox/src/java/org/apache/lucene/sandbox/search/DocValuesTermsQuery.java
index 68404e8d0fa..b95a7b2114c 100644
--- a/lucene/sandbox/src/java/org/apache/lucene/sandbox/search/DocValuesTermsQuery.java
+++ b/lucene/sandbox/src/java/org/apache/lucene/sandbox/search/DocValuesTermsQuery.java
@@ -210,10 +210,8 @@ public class DocValuesTermsQuery extends Query implements Accountable {
 
               @Override
               public boolean matches() throws IOException {
-                for (long ord = values.nextOrd();
-                    ord != SortedSetDocValues.NO_MORE_ORDS;
-                    ord = values.nextOrd()) {
-                  if (bits.get(ord)) {
+                for (int i = 0; i < values.docValueCount(); i++) {
+                  if (bits.get(values.nextOrd())) {
                     return true;
                   }
                 }
diff --git a/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java b/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
index 43e93990ae4..0c73fe1b69a 100644
--- a/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
+++ b/lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java
@@ -811,9 +811,8 @@ public class AnalyzingInfixSuggester extends Lookup implements Closeable {
         contexts = new HashSet<BytesRef>();
         int targetDocID = fd.doc - leaves.get(segment).docBase;
         if (contextsDV.advance(targetDocID) == targetDocID) {
-          long ord;
-          while ((ord = contextsDV.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
-            BytesRef context = BytesRef.deepCopyOf(contextsDV.lookupOrd(ord));
+          for (int j = 0; j < contextsDV.docValueCount(); j++) {
+            BytesRef context = BytesRef.deepCopyOf(contextsDV.lookupOrd(contextsDV.nextOrd()));
             contexts.add(context);
           }
         }