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

ishan pushed a commit to branch ishan/upgrade-to-lucene-10
in repository https://gitbox.apache.org/repos/asf/solr.git

commit d3d7d05122fc85d7a7f014b3b461c268f387ecdc
Author: Ishan Chattopadhyaya <[email protected]>
AuthorDate: Wed Aug 6 16:21:50 2025 +0530

    SOLR-17631: Fixing field cache ords counting, fixes TestFieldCache and 
TestFieldCacheVsDocValues
---
 .../src/java/org/apache/solr/uninverting/DocTermOrds.java    |  6 ++++--
 .../src/test/org/apache/solr/uninverting/TestFieldCache.java | 12 ++++++------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/uninverting/DocTermOrds.java 
b/solr/core/src/java/org/apache/solr/uninverting/DocTermOrds.java
index 74d886c0235..55071e4d856 100644
--- a/solr/core/src/java/org/apache/solr/uninverting/DocTermOrds.java
+++ b/solr/core/src/java/org/apache/solr/uninverting/DocTermOrds.java
@@ -816,9 +816,10 @@ public class DocTermOrds implements Accountable {
         // This value was inlined, and then read into a single buffer
         return bufferLength;
       } else {
-        // scan logic taken from read()
+        // scan logic taken from read() - count the number of term ordinals
         int start = index[doc] & 0x7fffffff;
         int cursor = start;
+        int count = 0;
         for (; ; ) {
           int delta = 0;
           for (; ; ) {
@@ -827,9 +828,10 @@ public class DocTermOrds implements Accountable {
             if ((b & 0x80) == 0) break;
           }
           if (delta == 0) break;
+          count++;
         }
 
-        return cursor - start - 1;
+        return count;
       }
     }
 
diff --git a/solr/core/src/test/org/apache/solr/uninverting/TestFieldCache.java 
b/solr/core/src/test/org/apache/solr/uninverting/TestFieldCache.java
index c0d7985955f..9c6bb0a9969 100644
--- a/solr/core/src/test/org/apache/solr/uninverting/TestFieldCache.java
+++ b/solr/core/src/test/org/apache/solr/uninverting/TestFieldCache.java
@@ -269,22 +269,22 @@ public class TestFieldCache extends SolrTestCase {
     termOrds = cache.getDocTermOrds(reader, 
"theRandomUnicodeMultiValuedField", null);
     assertEquals(numEntries, cache.getCacheEntries().length);
 
-    for (int i = 0; i < NUM_DOCS; i++) {
+    int doc;
+    while ((doc = termOrds.nextDoc()) != NO_MORE_DOCS) {
       // This will remove identical terms. A DocTermOrds doesn't return 
duplicate ords for a docId
-      List<BytesRef> values = new ArrayList<>(new 
LinkedHashSet<>(Arrays.asList(multiValued[i])));
+      List<BytesRef> values = new ArrayList<>(new 
LinkedHashSet<>(Arrays.asList(multiValued[doc])));
+      int processedValues = 0;
       for (BytesRef v : values) {
         if (v == null) {
           // why does this test use null values... instead of an empty list: 
confusing
           break;
         }
-        if (i > termOrds.docID()) {
-          assertEquals(i, termOrds.nextDoc());
-        }
         long ord = termOrds.nextOrd();
         BytesRef scratch = termOrds.lookupOrd(ord);
         assertEquals(v, scratch);
+        processedValues++;
       }
-      assertEquals(i, termOrds.docValueCount());
+      assertEquals(processedValues, termOrds.docValueCount());
     }
 
     // test bad field

Reply via email to