You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2015/09/07 15:34:48 UTC

svn commit: r1701621 [6/6] - in /lucene/dev/trunk: lucene/ lucene/core/src/java/org/apache/lucene/search/ lucene/core/src/java/org/apache/lucene/search/payloads/ lucene/core/src/java/org/apache/lucene/search/similarities/ lucene/core/src/java/org/apach...

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java Mon Sep  7 13:34:46 2015
@@ -171,11 +171,11 @@ public class CollapsingQParserPlugin ext
     }
 
     public int hashCode() {
-      int hashCode = collapseField.hashCode();
+      int hashCode = super.hashCode();
+      hashCode = 31 * hashCode + collapseField.hashCode();
       hashCode = max!=null ? hashCode+max.hashCode():hashCode;
       hashCode = min!=null ? hashCode+min.hashCode():hashCode;
       hashCode = hashCode+nullPolicy;
-      hashCode = hashCode*((1+Float.floatToIntBits(this.getBoost()))*31);
       return hashCode;
     }
 
@@ -186,8 +186,7 @@ public class CollapsingQParserPlugin ext
         if(this.collapseField.equals(c.collapseField) &&
            ((this.max == null && c.max == null) || (this.max != null && c.max != null && this.max.equals(c.max))) &&
            ((this.min == null && c.min == null) || (this.min != null && c.min != null && this.min.equals(c.min))) &&
-           this.nullPolicy == c.nullPolicy &&
-           this.getBoost()==c.getBoost()) {
+           this.nullPolicy == c.nullPolicy) {
           return true;
         }
       }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java Mon Sep  7 13:34:46 2015
@@ -18,6 +18,7 @@ package org.apache.solr.search;
 
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.Query;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.parser.QueryParser;
@@ -127,7 +128,7 @@ public class DisMaxQParser extends QPars
           Query fq = subQuery(f, FunctionQParserPlugin.NAME).getQuery();
           Float b = ff.get(f);
           if (null != b) {
-            fq.setBoost(b);
+            fq = new BoostQuery(fq, b);
           }
           query.add(fq, BooleanClause.Occur.SHOULD);
         }
@@ -151,7 +152,15 @@ public class DisMaxQParser extends QPars
       if (1 == boostQueries.size() && 1 == boostParams.length) {
         /* legacy logic */
         Query f = boostQueries.get(0);
-        if (1.0f == f.getBoost() && f instanceof BooleanQuery) {
+        while (f instanceof BoostQuery) {
+          BoostQuery bq = (BoostQuery) f;
+          if (bq .getBoost() == 1f) {
+            f = bq.getQuery();
+          } else {
+            break;
+          }
+        }
+        if (f instanceof BooleanQuery) {
           /* if the default boost was used, and we've got a BooleanQuery
            * extract the subqueries out and use them directly
            */

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExportQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExportQParserPlugin.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExportQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExportQParserPlugin.java Mon Sep  7 13:34:46 2015
@@ -87,7 +87,7 @@ public class ExportQParserPlugin extends
     public Query rewrite(IndexReader reader) throws IOException {
       Query q = mainQuery.rewrite(reader);
       if(q == mainQuery) {
-        return this;
+        return super.rewrite(reader);
       } else {
         return clone().wrap(q);
       }
@@ -102,16 +102,15 @@ public class ExportQParserPlugin extends
     }
 
     public int hashCode() {
-      return id.hashCode()+((int)getBoost());
+      return 31 * super.hashCode() + id.hashCode();
     }
     
     public boolean equals(Object o) {
-      if(o instanceof ExportQuery) {
-        ExportQuery q = (ExportQuery)o;
-        return (this.id == q.id && getBoost() == q.getBoost());
-      } else {
+      if (super.equals(o) == false) {
         return false;
       }
+      ExportQuery q = (ExportQuery)o;
+      return id == q.id;
     }
     
     public String toString(String s) {

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java Mon Sep  7 13:34:46 2015
@@ -40,6 +40,7 @@ import org.apache.lucene.queries.functio
 import org.apache.lucene.queries.function.valuesource.QueryValueSource;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.DisjunctionMaxQuery;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.MultiPhraseQuery;
@@ -473,8 +474,8 @@ public class ExtendedDismaxQParser exten
         for (String f : ff.keySet()) {
           Query fq = subQuery(f, FunctionQParserPlugin.NAME).getQuery();
           Float b = ff.get(f);
-          if (null != b) {
-            fq.setBoost(b);
+          if (null != b && b.floatValue() != 1f) {
+            fq = new BoostQuery(fq, b);
           }
           boostFunctions.add(fq);
         }
@@ -1213,8 +1214,8 @@ public class ExtendedDismaxQParser exten
         Query sub = getAliasedQuery();
         if (sub != null) {
           Float boost = a.fields.get(f);
-          if (boost != null) {
-            sub.setBoost(boost);
+          if (boost != null && boost.floatValue() != 1f) {
+            sub = new BoostQuery(sub, boost);
           }
           lst.add(sub);
         }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/HashQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/HashQParserPlugin.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/HashQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/HashQParserPlugin.java Mon Sep  7 13:34:46 2015
@@ -108,18 +108,15 @@ public class HashQParserPlugin extends Q
     }
 
     public int hashCode() {
-      return keysParam.hashCode()+workers+worker+(int)getBoost();
+      return 31 * super.hashCode() + keysParam.hashCode()+workers+worker;
     }
 
     public boolean equals(Object o) {
-      if (o instanceof HashQuery) {
-        HashQuery h = (HashQuery)o;
-        if(keysParam.equals(h.keysParam) && workers == h.workers && worker == h.worker && getBoost() == h.getBoost()) {
-          return true;
-        }
+      if (super.equals(o) == false) {
+        return false;
       }
-
-      return false;
+      HashQuery h = (HashQuery)o;
+      return keysParam.equals(h.keysParam) && workers == h.workers && worker == h.worker;
     }
 
     public HashQuery(String keysParam, int workers, int worker) {

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java Mon Sep  7 13:34:46 2015
@@ -147,7 +147,7 @@ class JoinQuery extends Query {
   @Override
   public Query rewrite(IndexReader reader) throws IOException {
     // don't rewrite the subQuery
-    return this;
+    return super.rewrite(reader);
   }
 
   @Override
@@ -515,7 +515,6 @@ class JoinQuery extends Query {
     JoinQuery other = (JoinQuery)o;
     return this.fromField.equals(other.fromField)
            && this.toField.equals(other.toField)
-           && this.getBoost() == other.getBoost()
            && this.q.equals(other.q)
            && (this.fromIndex == other.fromIndex || this.fromIndex != null && this.fromIndex.equals(other.fromIndex))
            && this.fromCoreOpenTime == other.fromCoreOpenTime

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/MaxScoreQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/MaxScoreQParser.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/MaxScoreQParser.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/MaxScoreQParser.java Mon Sep  7 13:34:46 2015
@@ -18,6 +18,7 @@ package org.apache.solr.search;
 
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.DisjunctionMaxQuery;
 import org.apache.lucene.search.Query;
 import org.apache.solr.common.params.SolrParams;
@@ -54,7 +55,16 @@ public class MaxScoreQParser extends Luc
   @Override
   public Query parse() throws SyntaxError {
     Query q = super.parse();
-    if (!(q instanceof BooleanQuery)) {
+    float boost = 1f;
+    if (q instanceof BoostQuery) {
+      BoostQuery bq = (BoostQuery) q;
+      boost = bq.getBoost();
+      q = bq.getQuery();
+    }
+    if (q instanceof BooleanQuery == false) {
+      if (boost != 1f) {
+        q = new BoostQuery(q, boost);
+      }
       return q;
     }
     BooleanQuery obq = (BooleanQuery)q;
@@ -79,7 +89,9 @@ public class MaxScoreQParser extends Luc
       newqb.add(c);
     }
     Query newq = newqb.build();
-    newq.setBoost(obq.getBoost());
+    if (boost != 1f) {
+      newq = new BoostQuery(newq, boost);
+    }
     return newq;
   }
 }
\ No newline at end of file

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/QueryParsing.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/QueryParsing.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/QueryParsing.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/QueryParsing.java Mon Sep  7 13:34:46 2015
@@ -22,6 +22,7 @@ import org.apache.lucene.queries.functio
 import org.apache.lucene.queries.function.valuesource.QueryValueSource;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.FuzzyQuery;
 import org.apache.lucene.search.NumericRangeQuery;
@@ -430,6 +431,13 @@ public class QueryParsing {
   public static void toString(Query query, IndexSchema schema, Appendable out, int flags) throws IOException {
     boolean writeBoost = true;
 
+    float boost = 1f;
+    if (query instanceof BoostQuery) {
+      BoostQuery bq = (BoostQuery) query;
+      query = bq.getQuery();
+      boost = bq.getBoost();
+    }
+
     if (query instanceof TermQuery) {
       TermQuery q = (TermQuery) query;
       Term t = q.getTerm();
@@ -483,7 +491,7 @@ public class QueryParsing {
       BooleanQuery q = (BooleanQuery) query;
       boolean needParens = false;
 
-      if (q.getBoost() != 1.0 || q.getMinimumNumberShouldMatch() != 0 || q.isCoordDisabled()) {
+      if (q.getMinimumNumberShouldMatch() != 0 || q.isCoordDisabled()) {
         needParens = true;
       }
       if (needParens) {
@@ -559,9 +567,9 @@ public class QueryParsing {
       writeBoost = false;
     }
 
-    if (writeBoost && query.getBoost() != 1.0f) {
+    if (writeBoost && boost != 1.0f) {
       out.append("^");
-      out.append(Float.toString(query.getBoost()));
+      out.append(Float.toString(boost));
     }
 
   }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/QueryUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/QueryUtils.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/QueryUtils.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/QueryUtils.java Mon Sep  7 13:34:46 2015
@@ -20,6 +20,7 @@ package org.apache.solr.search;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.Query;
 
@@ -53,13 +54,19 @@ public class QueryUtils {
    * @return Absolute version of the Query
    */
   public static Query getAbs(Query q) {
+    if (q instanceof BoostQuery) {
+      BoostQuery bq = (BoostQuery) q;
+      Query subQ = bq.getQuery();
+      Query absSubQ = getAbs(subQ);
+      if (absSubQ == subQ) return q;
+      return new BoostQuery(absSubQ, bq.getBoost());
+    }
+
     if (q instanceof WrappedQuery) {
       Query subQ = ((WrappedQuery)q).getWrappedQuery();
       Query absSubQ = getAbs(subQ);
       if (absSubQ == subQ) return q;
-      WrappedQuery newQ = (WrappedQuery)q.clone();
-      newQ.setWrappedQuery(absSubQ);
-      return newQ;
+      return new WrappedQuery(absSubQ);
     }
 
     if (!(q instanceof BooleanQuery)) return q;
@@ -89,9 +96,7 @@ public class QueryUtils {
       for (BooleanClause clause : clauses) {
         newBqB.add(clause.getQuery(), BooleanClause.Occur.SHOULD);
       }
-      Query newBq = newBqB.build();
-      newBq.setBoost(bq.getBoost());
-      return newBq;
+      return newBqB.build();
     }
   }
 
@@ -109,6 +114,12 @@ public class QueryUtils {
    * The query passed in *must* be a negative query.
    */
   public static Query fixNegativeQuery(Query q) {
+    float boost = 1f;
+    if (q instanceof BoostQuery) {
+      BoostQuery bq = (BoostQuery) q;
+      boost = bq.getBoost();
+      q = bq.getQuery();
+    }
     BooleanQuery bq = (BooleanQuery) q;
     BooleanQuery.Builder newBqB = new BooleanQuery.Builder();
     newBqB.setDisableCoord(bq.isCoordDisabled());
@@ -118,8 +129,7 @@ public class QueryUtils {
     }
     newBqB.add(new MatchAllDocsQuery(), Occur.MUST);
     BooleanQuery newBq = newBqB.build();
-    newBq.setBoost(bq.getBoost());
-    return newBq;
+    return new BoostQuery(newBq, boost);
   }
 
 }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ReRankQParserPlugin.java Mon Sep  7 13:34:46 2015
@@ -97,7 +97,7 @@ public class ReRankQParserPlugin extends
     }
   }
 
-  private class ReRankQuery extends RankQuery {
+  private final class ReRankQuery extends RankQuery {
     private Query mainQuery = defaultQuery;
     private Query reRankQuery;
     private int reRankDocs;
@@ -106,19 +106,18 @@ public class ReRankQParserPlugin extends
     private Map<BytesRef, Integer> boostedPriority;
 
     public int hashCode() {
-      return mainQuery.hashCode()+reRankQuery.hashCode()+(int)reRankWeight+reRankDocs+(int)getBoost();
+      return 31 * super.hashCode() + mainQuery.hashCode()+reRankQuery.hashCode()+(int)reRankWeight+reRankDocs;
     }
 
     public boolean equals(Object o) {
-      if(o instanceof ReRankQuery) {
-        ReRankQuery rrq = (ReRankQuery)o;
-        return (mainQuery.equals(rrq.mainQuery) &&
-                reRankQuery.equals(rrq.reRankQuery) &&
-                reRankWeight == rrq.reRankWeight &&
-                reRankDocs == rrq.reRankDocs &&
-                getBoost() == rrq.getBoost());
+      if (super.equals(o) == false) {
+        return false;
       }
-      return false;
+      ReRankQuery rrq = (ReRankQuery)o;
+      return mainQuery.equals(rrq.mainQuery) &&
+             reRankQuery.equals(rrq.reRankQuery) &&
+             reRankWeight == rrq.reRankWeight &&
+             reRankDocs == rrq.reRankDocs;
     }
 
     public ReRankQuery(Query reRankQuery, int reRankDocs, double reRankWeight, int length) {
@@ -162,17 +161,10 @@ public class ReRankQParserPlugin extends
 
     public Query rewrite(IndexReader reader) throws IOException {
       Query q = mainQuery.rewrite(reader);
-      if(q == mainQuery) {
-        return this;
-      } else {
-        return clone().wrap(q);
+      if (q != mainQuery) {
+        return new ReRankQuery(reRankQuery, reRankDocs, reRankWeight, length).wrap(q);
       }
-    }
-
-    public ReRankQuery clone() {
-      ReRankQuery clonedQuery =  new ReRankQuery(reRankQuery, reRankDocs, reRankWeight, length);
-      clonedQuery.setBoost(getBoost());
-      return clonedQuery;
+      return super.rewrite(reader);
     }
 
     public Weight createWeight(IndexSearcher searcher, boolean needsScores) throws IOException{

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SimpleQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SimpleQParserPlugin.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SimpleQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SimpleQParserPlugin.java Mon Sep  7 13:34:46 2015
@@ -21,6 +21,7 @@ import org.apache.lucene.analysis.Analyz
 import org.apache.lucene.queryparser.simple.SimpleQueryParser;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.Query;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.SimpleParams;
@@ -205,7 +206,10 @@ public class SimpleQParserPlugin extends
           prefix = type.getPrefixQuery(qParser, sf, text);
         }
 
-        prefix.setBoost(entry.getValue());
+        float boost = entry.getValue();
+        if (boost != 1f) {
+          prefix = new BoostQuery(prefix, boost);
+        }
         bq.add(prefix, BooleanClause.Occur.SHOULD);
       }
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java Mon Sep  7 13:34:46 2015
@@ -6,7 +6,6 @@ import java.util.Map;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.queries.function.ValueSource;
-import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.ConstantScoreScorer;
 import org.apache.lucene.search.ConstantScoreWeight;
 import org.apache.lucene.search.DocIdSet;
@@ -16,7 +15,6 @@ import org.apache.lucene.search.IndexSea
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.Scorer;
 import org.apache.lucene.search.Weight;
-import org.apache.lucene.util.Bits;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -42,13 +40,12 @@ import org.apache.lucene.util.Bits;
  *
  * Experimental and subject to change.
  */
-public class SolrConstantScoreQuery extends ConstantScoreQuery implements ExtendedQuery {
+public class SolrConstantScoreQuery extends Query implements ExtendedQuery {
   private final Filter filter;
   boolean cache = true;  // cache by default
   int cost;
 
   public SolrConstantScoreQuery(Filter filter) {
-    super(filter);
     this.filter = filter;
   }
 
@@ -86,12 +83,6 @@ public class SolrConstantScoreQuery exte
     return cost;
   }
 
-
-  @Override
-  public Query rewrite(IndexReader reader) throws IOException {
-    return this;
-  }
-
   protected class ConstantWeight extends ConstantScoreWeight {
     private Map context;
 
@@ -125,8 +116,7 @@ public class SolrConstantScoreQuery exte
   /** Prints a user-readable version of this query. */
   @Override
   public String toString(String field) {
-    return ExtendedQueryBase.getOptionsString(this) + "ConstantScore(" + filter.toString()
-      + (getBoost()==1.0 ? ")" : "^" + getBoost());
+    return ExtendedQueryBase.getOptionsString(this) + "ConstantScore(" + filter.toString() + ")";
   }
 
   /** Returns true if <code>o</code> is equal to this. */

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/WrappedQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/WrappedQuery.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/WrappedQuery.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/WrappedQuery.java Mon Sep  7 13:34:46 2015
@@ -25,7 +25,7 @@ import org.apache.lucene.search.Weight;
 import java.io.IOException;
 
 /** A simple query that wraps another query and implements ExtendedQuery. */
-public class WrappedQuery extends ExtendedQueryBase {
+public final class WrappedQuery extends ExtendedQueryBase {
   private Query q;
 
   public WrappedQuery(Query q) {
@@ -41,16 +41,6 @@ public class WrappedQuery extends Extend
   }
 
   @Override
-  public void setBoost(float b) {
-    q.setBoost(b);
-  }
-
-  @Override
-  public float getBoost() {
-    return q.getBoost();
-  }
-
-  @Override
   public Weight createWeight(IndexSearcher searcher, boolean needsScores) throws IOException {
     return q.createWeight(searcher, needsScores);
   }
@@ -62,13 +52,6 @@ public class WrappedQuery extends Extend
   }
 
   @Override
-  public WrappedQuery clone() {
-    WrappedQuery newQ = (WrappedQuery)super.clone();
-    newQ.q = (Query) q.clone();
-    return newQ;
-  }
-
-  @Override
   public int hashCode() {
     return q.hashCode();
   }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java Mon Sep  7 13:34:46 2015
@@ -107,7 +107,6 @@ public class ScoreJoinQParserPlugin exte
         fromCore.close();
         fromHolder.decref();
       }
-      joinQuery.setBoost(getBoost());
       return joinQuery.rewrite(reader);
     }
 
@@ -162,7 +161,6 @@ public class ScoreJoinQParserPlugin exte
       SolrRequestInfo info = SolrRequestInfo.getRequestInfo();
       final Query jq = JoinUtil.createJoinQuery(fromField, true,
           toField, fromQuery, info.getReq().getSearcher(), scoreMode);
-      jq.setBoost(getBoost());
       return jq.rewrite(reader);
     }
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DeleteByQueryWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DeleteByQueryWrapper.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DeleteByQueryWrapper.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DeleteByQueryWrapper.java Mon Sep  7 13:34:46 2015
@@ -61,7 +61,7 @@ final class DeleteByQueryWrapper extends
     if (rewritten != in) {
       return new DeleteByQueryWrapper(rewritten, schema);
     } else {
-      return this;
+      return super.rewrite(reader);
     }
   }
   

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java Mon Sep  7 13:34:46 2015
@@ -32,11 +32,13 @@ import java.util.TreeMap;
 import java.util.regex.Pattern;
 
 import com.google.common.collect.ImmutableMap;
+
 import org.apache.lucene.index.StorableField;
 import org.apache.lucene.index.StoredDocument;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.DisjunctionMaxQuery;
 import org.apache.lucene.search.Explanation;
 import org.apache.lucene.search.Query;
@@ -703,18 +705,27 @@ public class SolrPluginUtils {
    * </p>
    */
   public static void flattenBooleanQuery(BooleanQuery.Builder to, BooleanQuery from) {
+    flattenBooleanQuery(to, from, 1f);
+  }
+
+  private static void flattenBooleanQuery(BooleanQuery.Builder to, BooleanQuery from, float fromBoost) {
 
     for (BooleanClause clause : from.clauses()) {
 
       Query cq = clause.getQuery();
-      cq.setBoost(cq.getBoost() * from.getBoost());
+      float boost = fromBoost;
+      while (cq instanceof BoostQuery) {
+        BoostQuery bq = (BoostQuery) cq;
+        cq = bq.getQuery();
+        boost *= bq.getBoost();
+      }
 
       if (cq instanceof BooleanQuery
           && !clause.isRequired()
           && !clause.isProhibited()) {
 
         /* we can recurse */
-        flattenBooleanQuery(to, (BooleanQuery)cq);
+        flattenBooleanQuery(to, (BooleanQuery)cq, boost);
 
       } else {
         to.add(clause);
@@ -866,7 +877,7 @@ public class SolrPluginUtils {
           Query sub = getFieldQuery(f,queryText,quoted);
           if (null != sub) {
             if (null != a.fields.get(f)) {
-              sub.setBoost(a.fields.get(f));
+              sub = new BoostQuery(sub, a.fields.get(f));
             }
             q.add(sub);
             ok = true;

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java Mon Sep  7 13:34:46 2015
@@ -23,6 +23,7 @@ import java.util.Set;
 
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.DisjunctionMaxQuery;
 import org.apache.lucene.search.FuzzyQuery;
 import org.apache.lucene.search.Query;
@@ -1054,27 +1055,35 @@ public class TestExtendedDismaxParser ex
 
   private boolean containsClause(Query query, String field, String value,
       int boost, boolean fuzzy) {
-    
+
+    float queryBoost = 1f;
+    if (query instanceof BoostQuery) {
+      BoostQuery bq = (BoostQuery) query;
+      query = bq.getQuery();
+      queryBoost = bq.getBoost();
+    }
+
     if(query instanceof BooleanQuery) {
       return containsClause((BooleanQuery)query, field, value, boost, fuzzy);
     }
     if(query instanceof DisjunctionMaxQuery) {
       return containsClause((DisjunctionMaxQuery)query, field, value, boost, fuzzy);
     }
+    if (boost != queryBoost) {
+      return false;
+    }
     if(query instanceof TermQuery && !fuzzy) {
-      return containsClause((TermQuery)query, field, value, boost);
+      return containsClause((TermQuery)query, field, value);
     }
     if(query instanceof FuzzyQuery && fuzzy) {
-      return containsClause((FuzzyQuery)query, field, value, boost);
+      return containsClause((FuzzyQuery)query, field, value);
     }
     return false;
   }
 
-  private boolean containsClause(FuzzyQuery query, String field, String value,
-      int boost) {
+  private boolean containsClause(FuzzyQuery query, String field, String value) {
     if(query.getTerm().field().equals(field) && 
-       query.getTerm().bytes().utf8ToString().equals(value) && 
-       query.getBoost() == boost) {
+       query.getTerm().bytes().utf8ToString().equals(value)) {
       return true;
     }
     return false;
@@ -1089,10 +1098,9 @@ public class TestExtendedDismaxParser ex
     return false;
   }
   
-  private boolean containsClause(TermQuery query, String field, String value, int boost) {
+  private boolean containsClause(TermQuery query, String field, String value) {
     if(query.getTerm().field().equals(field) && 
-       query.getTerm().bytes().utf8ToString().equals(value) && 
-       query.getBoost() == boost) {
+       query.getTerm().bytes().utf8ToString().equals(value)) {
       return true;
     }
     return false;

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestMaxScoreQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestMaxScoreQueryParser.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestMaxScoreQueryParser.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestMaxScoreQueryParser.java Mon Sep  7 13:34:46 2015
@@ -17,6 +17,7 @@ package org.apache.solr.search;
  * limitations under the License.
  */
 
+import org.apache.lucene.index.Term;
 import org.apache.lucene.search.*;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.util.AbstractSolrTestCase;
@@ -40,10 +41,10 @@ public class TestMaxScoreQueryParser ext
   @Test
   public void testFallbackToLucene() {
     q = parse("foo");
-    assertTrue(q instanceof TermQuery);
+    assertEquals(new TermQuery(new Term("text", "foo")), q);
 
     q = parse("foo^3.0");
-    assertTrue(q instanceof TermQuery);
+    assertEquals(new BoostQuery(new TermQuery(new Term("text", "foo")), 3f), q);
 
     q = parse("price:[0 TO 10]");
     assertTrue(q instanceof NumericRangeQuery);
@@ -100,7 +101,8 @@ public class TestMaxScoreQueryParser ext
   public void testBoost() {
     // Simple term query
     q = parse("foo^3.0");
-    assertEquals(3.0, q.getBoost(), 1e-15);
+    assertTrue(q instanceof BoostQuery);
+    assertEquals(3.0, ((BoostQuery) q).getBoost(), 1e-15);
 
     // Some DMQ and one plain required
     q = parse("foo^5.0 bar^6.0 +baz^7");
@@ -108,12 +110,12 @@ public class TestMaxScoreQueryParser ext
     assertEquals(2, clauses.length);
     assertTrue(clauses[0].getQuery() instanceof DisjunctionMaxQuery);
     DisjunctionMaxQuery dmq = ((DisjunctionMaxQuery) clauses[0].getQuery());
-    float fooClause = ((BooleanQuery)dmq.getDisjuncts().get(0)).clauses().iterator().next().getQuery().getBoost();
-    assertEquals(5.0, fooClause, 1e-15);
-    float barClause = ((BooleanQuery)dmq.getDisjuncts().get(1)).clauses().iterator().next().getQuery().getBoost();
-    assertEquals(6.0, barClause, 1e-15);
-    assertEquals(7.0, clauses[1].getQuery().getBoost(), 1e-15);
-    assertEquals(1.0, q.getBoost(), 1e-15);
+    Query fooClause = ((BooleanQuery)dmq.getDisjuncts().get(0)).clauses().iterator().next().getQuery();
+    assertEquals(5.0, ((BoostQuery) fooClause).getBoost(), 1e-15);
+    Query barClause = ((BooleanQuery)dmq.getDisjuncts().get(1)).clauses().iterator().next().getQuery();
+    assertEquals(6.0, ((BoostQuery) barClause).getBoost(), 1e-15);
+    assertEquals(7.0, ((BoostQuery) clauses[1].getQuery()).getBoost(), 1e-15);
+    assertFalse(q instanceof BoostQuery);
 
     // Grouped with parens on top level
     q = parse("(foo^2.0 bar)^3.0");
@@ -121,11 +123,11 @@ public class TestMaxScoreQueryParser ext
     assertEquals(1, clauses.length);
     assertTrue(clauses[0].getQuery() instanceof DisjunctionMaxQuery);
     dmq = ((DisjunctionMaxQuery) clauses[0].getQuery());
-    fooClause = ((BooleanQuery)dmq.getDisjuncts().get(0)).clauses().iterator().next().getQuery().getBoost();
-    assertEquals(2.0, fooClause, 1e-15);
-    barClause = ((BooleanQuery)dmq.getDisjuncts().get(1)).clauses().iterator().next().getQuery().getBoost();
-    assertEquals(1.0, barClause, 1e-15);
-    assertEquals(3.0, q.getBoost(), 1e-15);
+    fooClause = ((BooleanQuery)dmq.getDisjuncts().get(0)).clauses().iterator().next().getQuery();
+    assertEquals(2.0, ((BoostQuery) fooClause).getBoost(), 1e-15);
+    barClause = ((BooleanQuery)dmq.getDisjuncts().get(1)).clauses().iterator().next().getQuery();
+    assertFalse(barClause instanceof BoostQuery);
+    assertEquals(3.0, ((BoostQuery) q).getBoost(), 1e-15);
   }
 
   //
@@ -148,6 +150,9 @@ public class TestMaxScoreQueryParser ext
   }
 
   private BooleanClause[] clauses(Query q) {
+    while (q instanceof BoostQuery) {
+      q = ((BoostQuery) q).getQuery();
+    }
     return ((BooleanQuery) q).clauses().toArray(new BooleanClause[0]);
   }
 }

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java Mon Sep  7 13:34:46 2015
@@ -117,14 +117,6 @@ public class TestRankQueryPlugin extends
       return q.createWeight(indexSearcher, needsScores);
     }
 
-    public void setBoost(float boost) {
-      q.setBoost(boost);
-    }
-
-    public float getBoost() {
-      return q.getBoost();
-    }
-
     @Override
     public String toString(String field) {
       return q.toString(field);

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java Mon Sep  7 13:34:46 2015
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.search;
 
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.Query;
 import org.apache.solr.SolrTestCaseJ4;
@@ -154,14 +155,14 @@ public class TestSolrQueryParser extends
     assertJQ(req("fq","id:1", "fl","id,score", "q", subqq+"^3", "qq","text:x^2"
         , "debug","query"
     )
-        ,"/debug/parsedquery=='text:x^6.0'"
+        ,"/debug/parsedquery_toString=='(text:x^2.0)^3.0'"
     );
 
     // boost should multiply
     assertJQ(req("fq","id:1", "fl","id,score", "q", "  {!v=$qq}^3", "qq","text:x^2"
         , "debug","query"
     )
-        ,"/debug/parsedquery=='text:x^6.0'"
+        ,"/debug/parsedquery_toString=='(text:x^2.0)^3.0'"
     );
 
   }
@@ -174,13 +175,15 @@ public class TestSolrQueryParser extends
 
     QParser qParser = QParser.getParser("text:x^=3", "lucene", req);
     Query q = qParser.getQuery();
-    assertTrue( q instanceof ConstantScoreQuery);
-    assertEquals(3.0, q.getBoost(), 0.0f);
+    assertTrue( q instanceof BoostQuery);
+    assertTrue(((BoostQuery) q).getQuery() instanceof ConstantScoreQuery);
+    assertEquals(3.0, ((BoostQuery) q).getBoost(), 0.0f);
 
     qParser = QParser.getParser("(text:x text:y)^=-3", "lucene", req);
     q = qParser.getQuery();
-    assertTrue( q instanceof ConstantScoreQuery );
-    assertEquals(-3.0, q.getBoost(), 0.0f);
+    assertTrue( q instanceof BoostQuery);
+    assertTrue(((BoostQuery) q).getQuery() instanceof ConstantScoreQuery);
+    assertEquals(-3.0, ((BoostQuery) q).getBoost(), 0.0f);
 
     req.close();
   }

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPScore.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPScore.java?rev=1701621&r1=1701620&r2=1701621&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPScore.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPScore.java Mon Sep  7 13:34:46 2015
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Random;
 
+import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.join.ScoreMode;
 import org.apache.solr.SolrTestCaseJ4;
@@ -191,7 +192,9 @@ public class TestScoreJoinQPScore extend
     final SolrQueryRequest req = req("q", "{!join from=movieId_s to=id score=" + score + " b=200}title:movie", "fl", "id,score", "omitHeader", "true");
     SolrRequestInfo.setRequestInfo(new SolrRequestInfo(req, new SolrQueryResponse()));
     final Query luceneQ = QParser.getParser(req.getParams().get("q"), null, req).getQuery().rewrite(req.getSearcher().getLeafReader());
-    assertEquals("" + luceneQ, Float.floatToIntBits(200), Float.floatToIntBits(luceneQ.getBoost()));
+    assertTrue(luceneQ instanceof BoostQuery);
+    float boost = ((BoostQuery) luceneQ).getBoost();
+    assertEquals("" + luceneQ, Float.floatToIntBits(200), Float.floatToIntBits(boost));
     SolrRequestInfo.clearRequestInfo();
     req.close();
   }