You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by cu...@apache.org on 2003/01/20 20:01:32 UTC
cvs commit: jakarta-lucene/src/java/org/apache/lucene/search BooleanQuery.java
cutting 2003/01/20 11:01:31
Modified: src/java/org/apache/lucene/search BooleanQuery.java
Log:
Optimized last fix so that the BooleanQuery is only cloned when one of its clauses has rewritten.
Revision Changes Path
1.13 +15 -12 jakarta-lucene/src/java/org/apache/lucene/search/BooleanQuery.java
Index: BooleanQuery.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/BooleanQuery.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- BooleanQuery.java 20 Jan 2003 18:40:19 -0000 1.12
+++ BooleanQuery.java 20 Jan 2003 19:01:31 -0000 1.13
@@ -202,26 +202,29 @@
if (clauses.size() == 1) { // optimize 1-clause queries
BooleanClause c = (BooleanClause)clauses.elementAt(0);
if (!c.prohibited) { // just return clause
- Query clone = (Query)c.query.clone(); // have to clone to boost
- clone.setBoost(getBoost() * clone.getBoost());
- return clone;
+ Query query = c.query;
+ if (getBoost() != 1.0f) { // have to clone to boost
+ query = (Query)query.clone();
+ query.setBoost(getBoost() * query.getBoost());
+ }
+ return query;
}
}
- BooleanQuery clone = (BooleanQuery)this.clone(); // recursively clone
- boolean changed = false;
+ BooleanQuery clone = null; // recursively rewrite
for (int i = 0 ; i < clauses.size(); i++) {
BooleanClause c = (BooleanClause)clauses.elementAt(i);
- Query q = c.query.rewrite(reader);
- if (q != c.query) { // rewrote
- changed = true; // replace in clone
+ Query query = c.query.rewrite(reader);
+ if (query != c.query) { // clause rewrote: must clone
+ if (clone == null)
+ clone = (BooleanQuery)this.clone();
clone.clauses.setElementAt
- (new BooleanClause(q, c.required, c.prohibited), i);
+ (new BooleanClause(query, c.required, c.prohibited), i);
}
}
- if (changed)
- return clone; // clauses rewrote
- else
+ if (clone != null) {
+ return clone; // some clauses rewrote
+ } else
return this; // no clauses rewrote
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>