romseygeek commented on code in PR #15083:
URL: https://github.com/apache/lucene/pull/15083#discussion_r2282730294


##########
lucene/core/src/java/org/apache/lucene/index/DocValuesSkipper.java:
##########
@@ -122,4 +123,61 @@ public final void advance(long minValue, long maxValue) 
throws IOException {
       advance(maxDocID + 1);
     }
   }
+
+  /**
+   * Returns the minimum value for a field across all segments, or {@link 
Long#MIN_VALUE} if not
+   * available
+   *
+   * @param searcher a searcher over the index
+   * @param field the field to retrieve values for
+   */
+  public static long globalMinValue(IndexSearcher searcher, String field) 
throws IOException {
+    long minValue = Long.MAX_VALUE;
+    for (LeafReaderContext ctx : searcher.getLeafContexts()) {
+      DocValuesSkipper skipper = ctx.reader().getDocValuesSkipper(field);
+      if (skipper == null) {
+        minValue = Long.MIN_VALUE;
+      } else {
+        minValue = Math.min(minValue, skipper.minValue());
+      }
+    }
+    return minValue;
+  }

Review Comment:
   Reading this back I realise that 'skip' is an overloaded term here :). To 
clarify: ignoring values for segments that don't have a DocValuesSkipper 
enabled might mean that we incorrectly return a global minimum value.  Let's 
say we have a MultiReader over two segments, one with DVS enabled and values of 
[10-20], and one without with values of [0-5].  If we skip the second segment 
when calculating, we return a global minimum value of 10, and so a count() 
shortcut for the range [2-8] would assume that no documents match, when in fact 
some of the documents in the second segment do.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to