You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2024/06/04 17:03:09 UTC

(lucene) branch branch_9x updated: Rewrite newSlowRangeQuery to MatchNoDocsQuery when upper > lower (#13425)

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

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


The following commit(s) were added to refs/heads/branch_9x by this push:
     new 2ed1f2fe99f Rewrite newSlowRangeQuery to MatchNoDocsQuery when upper > lower (#13425)
2ed1f2fe99f is described below

commit 2ed1f2fe99fdecd44fb706f463273acb72759972
Author: Ioana Tagirta <io...@users.noreply.github.com>
AuthorDate: Tue Jun 4 18:38:50 2024 +0200

    Rewrite newSlowRangeQuery to MatchNoDocsQuery when upper > lower (#13425)
---
 lucene/CHANGES.txt                                     |  3 +++
 .../document/SortedNumericDocValuesRangeQuery.java     |  4 ++++
 .../org/apache/lucene/search/TestDocValuesQueries.java | 18 ++++++++++++++++++
 3 files changed, 25 insertions(+)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 27f4407f97c..487546fd3df 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -22,6 +22,9 @@ Optimizations
 
 * GITHUB#13439: Avoid unnecessary memory allocation in PackedLongValues#Iterator. (Zhang Chao)
 
+* GITHUB##13425: Rewrite SortedNumericDocValuesRangeQuery to MatchNoDocsQuery when the upper bound is smaller than the
+  lower bound. (Ioana Tagirta)
+
 Bug Fixes
 ---------------------
 (No changes)
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
index 21264409136..c666482724e 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
@@ -26,6 +26,7 @@ import org.apache.lucene.search.ConstantScoreScorer;
 import org.apache.lucene.search.ConstantScoreWeight;
 import org.apache.lucene.search.FieldExistsQuery;
 import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryVisitor;
 import org.apache.lucene.search.ScoreMode;
@@ -87,6 +88,9 @@ final class SortedNumericDocValuesRangeQuery extends Query {
     if (lowerValue == Long.MIN_VALUE && upperValue == Long.MAX_VALUE) {
       return new FieldExistsQuery(field);
     }
+    if (lowerValue > upperValue) {
+      return new MatchNoDocsQuery();
+    }
     return super.rewrite(indexSearcher);
   }
 
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java b/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java
index a54be70360e..c864fa0d98c 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java
@@ -288,6 +288,24 @@ public class TestDocValuesQueries extends LuceneTestCase {
     dir.close();
   }
 
+  public void testSlowRangeQueryRewrite() throws IOException {
+    Directory dir = newDirectory();
+    RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
+    IndexReader reader = iw.getReader();
+    iw.close();
+    IndexSearcher searcher = newSearcher(reader);
+
+    QueryUtils.checkEqual(
+        NumericDocValuesField.newSlowRangeQuery("foo", 10, 1).rewrite(searcher),
+        new MatchNoDocsQuery());
+    QueryUtils.checkEqual(
+        NumericDocValuesField.newSlowRangeQuery("foo", Long.MIN_VALUE, Long.MAX_VALUE)
+            .rewrite(searcher),
+        new FieldExistsQuery("foo"));
+    reader.close();
+    dir.close();
+  }
+
   public void testSortedNumericNPE() throws IOException {
     Directory dir = newDirectory();
     RandomIndexWriter iw = new RandomIndexWriter(random(), dir);