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);