You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/04/27 16:50:03 UTC
svn commit: r1097133 -
/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java
Author: simonw
Date: Wed Apr 27 14:50:02 2011
New Revision: 1097133
URL: http://svn.apache.org/viewvc?rev=1097133&view=rev
Log:
LUCENE-3048: Improve BooleanQuery rewrite documentation
Modified:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java?rev=1097133&r1=1097132&r2=1097133&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/BooleanQuery.java Wed Apr 27 14:50:02 2011
@@ -367,8 +367,12 @@ public class BooleanQuery extends Query
Query query = c.getQuery().rewrite(reader); // rewrite first
if (getBoost() != 1.0f) { // incorporate boost
- if (query == c.getQuery()) // if rewrite was no-op
+ if (query == c.getQuery()) { // if rewrite was no-op
query = (Query)query.clone(); // then clone before boost
+ }
+ // Since the BooleanQuery only has 1 clause, the BooleanQuery will be
+ // written out. Therefore the rewritten Query's boost must incorporate both
+ // the clause's boost, and the boost of the BooleanQuery itself
query.setBoost(getBoost() * query.getBoost());
}
@@ -381,8 +385,12 @@ public class BooleanQuery extends Query
BooleanClause c = clauses.get(i);
Query query = c.getQuery().rewrite(reader);
if (query != c.getQuery()) { // clause rewrote: must clone
- if (clone == null)
+ if (clone == null) {
+ // The BooleanQuery clone is lazily initialized so only initialize
+ // it if a rewritten clause differs from the original clause (and hasn't been
+ // initialized already). If nothing differs, the clone isn't needlessly created
clone = (BooleanQuery)this.clone();
+ }
clone.clauses.set(i, new BooleanClause(query, c.getOccur()));
}
}