You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ju...@apache.org on 2021/07/09 20:01:37 UTC
[lucene] 01/01: LUCENE-10022: Rewrite empty DisjunctionMaxQuery to
MatchNoDocsQuery
This is an automated email from the ASF dual-hosted git repository.
julietibs pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene.git
commit 08e61a22016233fa68caa92f850657a2494bd3a2
Author: Julie Tibshirani <ju...@gmail.com>
AuthorDate: Thu Jul 8 19:08:33 2021 -0700
LUCENE-10022: Rewrite empty DisjunctionMaxQuery to MatchNoDocsQuery
It's possible to create a DisjunctionMaxQuery with no clauses. This is now
rewritten to MatchNoDocsQuery, matching the approach we take for BooleanQuery.
---
lucene/CHANGES.txt | 3 +++
.../src/java/org/apache/lucene/search/DisjunctionMaxQuery.java | 4 ++++
.../test/org/apache/lucene/search/TestDisjunctionMaxQuery.java | 8 ++++++++
3 files changed, 15 insertions(+)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index f113085..c55f399 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -379,6 +379,9 @@ Optimizations
particular in the case of many fields and many indexing threads.
(Adrien Grand)
+* LUCENE-10022: Rewrite empty DisjunctionMaxQuery to MatchNoDocsQuery.
+ (David Harsha via Julie Tibshirani)
+
Bug Fixes
---------------------
* LUCENE-9988: Fix DrillSideways correctness bug introduced in LUCENE-9944 (Greg Miller)
diff --git a/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java b/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
index 3b2e1e2..2ca6576 100644
--- a/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
@@ -207,6 +207,10 @@ public final class DisjunctionMaxQuery extends Query implements Iterable<Query>
*/
@Override
public Query rewrite(IndexReader reader) throws IOException {
+ if (disjuncts.isEmpty()) {
+ return new MatchNoDocsQuery("empty DisjunctionMaxQuery");
+ }
+
if (disjuncts.size() == 1) {
return disjuncts.iterator().next();
}
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java b/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
index f55b3a5..e381826 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
@@ -22,6 +22,7 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Locale;
import org.apache.lucene.analysis.MockAnalyzer;
@@ -468,6 +469,13 @@ public class TestDisjunctionMaxQuery extends LuceneTestCase {
assertEquals(expected, rewritten);
}
+ public void testRewriteEmpty() throws Exception {
+ DisjunctionMaxQuery q = new DisjunctionMaxQuery(Collections.emptyList(), 0.0f);
+ Query rewritten = s.rewrite(q);
+ Query expected = new MatchNoDocsQuery();
+ assertEquals(expected, rewritten);
+ }
+
public void testDisjunctOrderAndEquals() throws Exception {
// the order that disjuncts are provided in should not matter for equals() comparisons
Query sub1 = tq("hed", "albino");