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

[lucene] branch main updated: ExitableTerms to override getMin and getMax (#11985)

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

javanna 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 343d888b301 ExitableTerms to override getMin and getMax (#11985)
343d888b301 is described below

commit 343d888b3017f91522bf99df7d7484468cf4d1da
Author: Luca Cavanna <ja...@apache.org>
AuthorDate: Wed Nov 30 10:06:31 2022 +0100

    ExitableTerms to override getMin and getMax (#11985)
    
    ExitableTerms should not iterate through the terms to retrieve min and max when the wrapped implementation has the values cached (e.g. FieldsReader, OrdsFieldReader)
---
 .../lucene/index/ExitableDirectoryReader.java      | 10 ++++++++
 .../lucene/index/TestExitableDirectoryReader.java  | 29 ++++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/lucene/core/src/java/org/apache/lucene/index/ExitableDirectoryReader.java b/lucene/core/src/java/org/apache/lucene/index/ExitableDirectoryReader.java
index 09da414221a..cfde6605b08 100644
--- a/lucene/core/src/java/org/apache/lucene/index/ExitableDirectoryReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/ExitableDirectoryReader.java
@@ -703,6 +703,16 @@ public class ExitableDirectoryReader extends FilterDirectoryReader {
     public TermsEnum iterator() throws IOException {
       return new ExitableTermsEnum(in.iterator(), queryTimeout);
     }
+
+    @Override
+    public BytesRef getMin() throws IOException {
+      return in.getMin();
+    }
+
+    @Override
+    public BytesRef getMax() throws IOException {
+      return in.getMax();
+    }
   }
 
   /**
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java b/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java
index 03476c14a26..bd60fab2daa 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestExitableDirectoryReader.java
@@ -279,6 +279,35 @@ public class TestExitableDirectoryReader extends LuceneTestCase {
     directory.close();
   }
 
+  public void testExitableTermsMinAndMax() throws IOException {
+    Directory directory = newDirectory();
+    IndexWriter w = new IndexWriter(directory, newIndexWriterConfig(new MockAnalyzer(random())));
+    Document doc = new Document();
+    StringField fooField = new StringField("foo", "bar", Field.Store.NO);
+    doc.add(fooField);
+    w.addDocument(doc);
+    w.flush();
+
+    DirectoryReader directoryReader = DirectoryReader.open(w);
+    for (LeafReaderContext lfc : directoryReader.leaves()) {
+      ExitableDirectoryReader.ExitableTerms terms =
+          new ExitableDirectoryReader.ExitableTerms(
+              lfc.reader().terms("foo"), infiniteQueryTimeout()) {
+            @Override
+            public TermsEnum iterator() {
+              fail("min and max should be retrieved from block tree, no need to iterate");
+              return null;
+            }
+          };
+      assertEquals("bar", terms.getMin().utf8ToString());
+      assertEquals("bar", terms.getMax().utf8ToString());
+    }
+
+    w.close();
+    directoryReader.close();
+    directory.close();
+  }
+
   private static QueryTimeout infiniteQueryTimeout() {
     return () -> false;
   }