You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ji...@apache.org on 2017/06/16 15:07:16 UTC
lucene-solr:master: LUCENE-7874: DisjunctionMaxQuery rewrites to a
BooleanQuery when tiebreaker is set to 1.
Repository: lucene-solr
Updated Branches:
refs/heads/master 0c683305a -> 68d29c9b4
LUCENE-7874: DisjunctionMaxQuery rewrites to a BooleanQuery when tiebreaker is set to 1.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/68d29c9b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/68d29c9b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/68d29c9b
Branch: refs/heads/master
Commit: 68d29c9b4f167b3a350c14db9e7dc35811b52c54
Parents: 0c68330
Author: Jim Ferenczi <ji...@apache.org>
Authored: Fri Jun 16 17:06:59 2017 +0200
Committer: Jim Ferenczi <ji...@apache.org>
Committed: Fri Jun 16 17:06:59 2017 +0200
----------------------------------------------------------------------
lucene/CHANGES.txt | 2 ++
.../apache/lucene/search/DisjunctionMaxQuery.java | 8 ++++++++
.../lucene/search/TestDisjunctionMaxQuery.java | 15 +++++++++++++++
3 files changed, 25 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/68d29c9b/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index f11e8af..595ed12 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -112,6 +112,8 @@ Optimizations
query is a point (for 2D) or a is a simple date interval (e.g. 1 month). When
the strategy is marked as pointsOnly, the results is a TermQuery. (David Smiley)
+* LUCENE-7874: DisjunctionMaxQuery rewrites to a BooleanQuery when tiebreaker is set to 1. (Jim Ferenczi)
+
Other
* LUCENE-7328: Remove LegacyNumericEncoding from GeoPointField. (Nick Knize)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/68d29c9b/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
----------------------------------------------------------------------
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 44cbd52..4ea29d6 100644
--- a/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/DisjunctionMaxQuery.java
@@ -178,6 +178,14 @@ public final class DisjunctionMaxQuery extends Query implements Iterable<Query>
return disjuncts[0];
}
+ if (tieBreakerMultiplier == 1.0f) {
+ BooleanQuery.Builder builder = new BooleanQuery.Builder();
+ for (Query sub : disjuncts) {
+ builder.add(sub, BooleanClause.Occur.SHOULD);
+ }
+ return builder.build();
+ }
+
boolean actuallyRewritten = false;
List<Query> rewrittenDisjuncts = new ArrayList<>();
for (Query sub : disjuncts) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/68d29c9b/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
----------------------------------------------------------------------
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 112d892..79cdf00 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java
@@ -523,6 +523,21 @@ public class TestDisjunctionMaxQuery extends LuceneTestCase {
assertTrue("score should be negative", h[i].score < 0);
}
}
+
+ public void testRewriteBoolean() throws Exception {
+ Query sub1 = tq("hed", "albino");
+ Query sub2 = tq("hed", "elephant");
+ DisjunctionMaxQuery q = new DisjunctionMaxQuery(
+ Arrays.asList(
+ sub1, sub2
+ ), 1.0f);
+ Query rewritten = s.rewrite(q);
+ assertTrue(rewritten instanceof BooleanQuery);
+ BooleanQuery bq = (BooleanQuery) rewritten;
+ assertEquals(bq.clauses().size(), 2);
+ assertEquals(bq.clauses().get(0), new BooleanClause(sub1, BooleanClause.Occur.SHOULD));
+ assertEquals(bq.clauses().get(1), new BooleanClause(sub2, BooleanClause.Occur.SHOULD));
+ }
/** macro */
protected Query tq(String f, String t) {