mirror of https://github.com/apache/lucene.git
Optimized last fix so that the BooleanQuery is only cloned when one of its clauses has rewritten.
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@149934 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
637b10da6c
commit
d1fec6e830
|
@ -202,26 +202,29 @@ public class BooleanQuery extends Query {
|
||||||
if (clauses.size() == 1) { // optimize 1-clause queries
|
if (clauses.size() == 1) { // optimize 1-clause queries
|
||||||
BooleanClause c = (BooleanClause)clauses.elementAt(0);
|
BooleanClause c = (BooleanClause)clauses.elementAt(0);
|
||||||
if (!c.prohibited) { // just return clause
|
if (!c.prohibited) { // just return clause
|
||||||
Query clone = (Query)c.query.clone(); // have to clone to boost
|
Query query = c.query;
|
||||||
clone.setBoost(getBoost() * clone.getBoost());
|
if (getBoost() != 1.0f) { // have to clone to boost
|
||||||
return clone;
|
query = (Query)query.clone();
|
||||||
|
query.setBoost(getBoost() * query.getBoost());
|
||||||
|
}
|
||||||
|
return query;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BooleanQuery clone = (BooleanQuery)this.clone(); // recursively clone
|
BooleanQuery clone = null; // recursively rewrite
|
||||||
boolean changed = false;
|
|
||||||
for (int i = 0 ; i < clauses.size(); i++) {
|
for (int i = 0 ; i < clauses.size(); i++) {
|
||||||
BooleanClause c = (BooleanClause)clauses.elementAt(i);
|
BooleanClause c = (BooleanClause)clauses.elementAt(i);
|
||||||
Query q = c.query.rewrite(reader);
|
Query query = c.query.rewrite(reader);
|
||||||
if (q != c.query) { // rewrote
|
if (query != c.query) { // clause rewrote: must clone
|
||||||
changed = true; // replace in clone
|
if (clone == null)
|
||||||
|
clone = (BooleanQuery)this.clone();
|
||||||
clone.clauses.setElementAt
|
clone.clauses.setElementAt
|
||||||
(new BooleanClause(q, c.required, c.prohibited), i);
|
(new BooleanClause(query, c.required, c.prohibited), i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changed)
|
if (clone != null) {
|
||||||
return clone; // clauses rewrote
|
return clone; // some clauses rewrote
|
||||||
else
|
} else
|
||||||
return this; // no clauses rewrote
|
return this; // no clauses rewrote
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue