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/06/18 09:14:07 UTC

svn commit: r1686145 [8/8] - in /lucene/dev/trunk: lucene/ lucene/analysis/common/src/test/org/apache/lucene/analysis/shingle/ lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/ lucene/benchmark/src/java/org/apache/lucene/benchmark/qua...

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/BaseExplanationTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/BaseExplanationTestCase.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/BaseExplanationTestCase.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/BaseExplanationTestCase.java Thu Jun 18 07:14:05 2015
@@ -115,11 +115,11 @@ public abstract class BaseExplanationTes
    * Convenience subclass of TermsQuery
    */
   protected Query matchTheseItems(int[] terms) {
-    BooleanQuery query = new BooleanQuery();
+    BooleanQuery.Builder query = new BooleanQuery.Builder();
     for(int term : terms) {
       query.add(new BooleanClause(new TermQuery(new Term(KEY, ""+term)), BooleanClause.Occur.SHOULD));
     }
-    return query;
+    return query.build();
   }
 
   /** helper for generating MultiPhraseQueries */
@@ -199,10 +199,11 @@ public abstract class BaseExplanationTes
    * with a second prohibited clause which will never match anything
    */
   public Query optB(Query q) throws Exception {
-    BooleanQuery bq = new BooleanQuery(true);
+    BooleanQuery.Builder bq = new BooleanQuery.Builder();
+    bq.setDisableCoord(true);
     bq.add(q, BooleanClause.Occur.SHOULD);
     bq.add(new TermQuery(new Term("NEVER","MATCH")), BooleanClause.Occur.MUST_NOT);
-    return bq;
+    return bq.build();
   }
 
   /**
@@ -210,9 +211,10 @@ public abstract class BaseExplanationTes
    * with a second optional clause which will match everything
    */
   public Query reqB(Query q) throws Exception {
-    BooleanQuery bq = new BooleanQuery(true);
+    BooleanQuery.Builder bq = new BooleanQuery.Builder();
+    bq.setDisableCoord(true);
     bq.add(q, BooleanClause.Occur.MUST);
     bq.add(new TermQuery(new Term(FIELD,"w1")), BooleanClause.Occur.SHOULD);
-    return bq;
+    return bq.build();
   }
 }

Added: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ScorerIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ScorerIndexSearcher.java?rev=1686145&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ScorerIndexSearcher.java (added)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/ScorerIndexSearcher.java Thu Jun 18 07:14:05 2015
@@ -0,0 +1,62 @@
+package org.apache.lucene.search;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.LeafReaderContext;
+
+/**
+ * An {@link IndexSearcher} that always uses the {@link Scorer} API, never {@link BulkScorer}.
+ */
+public class ScorerIndexSearcher extends IndexSearcher {
+
+  /** Creates a searcher searching the provided index. Search on individual
+   *  segments will be run in the provided {@link ExecutorService}.
+   * @see IndexSearcher#IndexSearcher(IndexReader, ExecutorService) */
+  public ScorerIndexSearcher(IndexReader r, ExecutorService executor) {
+    super(r, executor);
+  }
+
+  /** Creates a searcher searching the provided index.
+   * @see IndexSearcher#IndexSearcher(IndexReader) */
+  public ScorerIndexSearcher(IndexReader r) {
+    super(r);
+  }
+
+  @Override
+  protected void search(List<LeafReaderContext> leaves, Weight weight, Collector collector) throws IOException {
+    for (LeafReaderContext ctx : leaves) { // search each subreader
+      // we force the use of Scorer (not BulkScorer) to make sure
+      // that the scorer passed to LeafCollector.setScorer supports
+      // Scorer.getChildren
+      Scorer scorer = weight.scorer(ctx, ctx.reader().getLiveDocs());
+      if (scorer != null) {
+        final LeafCollector leafCollector = collector.getLeafCollector(ctx);
+        leafCollector.setScorer(scorer);
+        for (int doc = scorer.nextDoc(); doc != DocIdSetIterator.NO_MORE_DOCS; doc = scorer.nextDoc()) {
+          leafCollector.collect(doc);
+        }
+      }
+    }
+  }
+
+}
\ No newline at end of file

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/SearchEquivalenceTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/SearchEquivalenceTestBase.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/SearchEquivalenceTestBase.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/search/SearchEquivalenceTestBase.java Thu Jun 18 07:14:05 2015
@@ -343,9 +343,9 @@ public abstract class SearchEquivalenceT
   }
   
   protected Query filteredBooleanQuery(Query query, Filter filter) {
-    BooleanQuery bq = new BooleanQuery();
+    BooleanQuery.Builder bq = new BooleanQuery.Builder();
     bq.add(query, Occur.MUST);
     bq.add(filter, Occur.FILTER);
-    return bq;
+    return bq.build();
   }
 }

Modified: lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java (original)
+++ lucene/dev/trunk/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java Thu Jun 18 07:14:05 2015
@@ -220,9 +220,9 @@ public class TestHierarchicalDocBuilder
   private Query createBlockJoinQuery(Hierarchy hierarchy) {
     List<Hierarchy> elements = hierarchy.elements;
     if (elements.isEmpty()) {
-      BooleanQuery childQuery = new BooleanQuery();
+      BooleanQuery.Builder childQuery = new BooleanQuery.Builder();
       childQuery.add(new TermQuery(new Term(FIELD_ID, (String) hierarchy.elementData.get(FIELD_ID))), Occur.MUST);
-      return childQuery;
+      return childQuery.build();
     }
     
     Query childQuery = createBlockJoinQuery(elements.get(random().nextInt(elements.size())));
@@ -230,9 +230,9 @@ public class TestHierarchicalDocBuilder
   }
 
   private ToParentBlockJoinQuery createToParentQuery(String parentType, String childField, String childFieldValue) {
-    BooleanQuery childQuery = new BooleanQuery();
+    BooleanQuery.Builder childQuery = new BooleanQuery.Builder();
     childQuery.add(new TermQuery(new Term(childField, childFieldValue)), Occur.MUST);
-    ToParentBlockJoinQuery result = createToParentQuery(parentType, childQuery);
+    ToParentBlockJoinQuery result = createToParentQuery(parentType, childQuery.build());
     
     return result;
   }
@@ -458,9 +458,9 @@ public class TestHierarchicalDocBuilder
   private final String childEntityTemplate = "<entity " + ConfigNameConstants.CHILD + "=\"true\" name=\"{0}\" query=\"{1}\">\n {2} {3} </entity>\n";
   
   private BitDocIdSetFilter createParentFilter(String type) {
-    BooleanQuery parentQuery = new BooleanQuery();
+    BooleanQuery.Builder parentQuery = new BooleanQuery.Builder();
     parentQuery.add(new TermQuery(new Term("type_s", type)), Occur.MUST);
-    return new BitDocIdSetCachingWrapperFilter(new QueryWrapperFilter(parentQuery));
+    return new BitDocIdSetCachingWrapperFilter(new QueryWrapperFilter(parentQuery.build()));
   }
   
   private String nextId() {

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java Thu Jun 18 07:14:05 2015
@@ -63,6 +63,7 @@ import java.io.Reader;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
@@ -369,14 +370,19 @@ public class MoreLikeThisHandler extends
     private Query getBoostedQuery(Query mltquery) {
       BooleanQuery boostedQuery = (BooleanQuery)mltquery.clone();
       if (boostFields.size() > 0) {
-        List clauses = boostedQuery.clauses();
-        for( Object o : clauses ) {
-          TermQuery q = (TermQuery)((BooleanClause)o).getQuery();
+        BooleanQuery.Builder newQ = new BooleanQuery.Builder();
+        newQ.setDisableCoord(boostedQuery.isCoordDisabled());
+        newQ.setMinimumNumberShouldMatch(boostedQuery.getMinimumNumberShouldMatch());
+        for (BooleanClause clause : boostedQuery) {
+          TermQuery q = (TermQuery) clause.getQuery();
           Float b = this.boostFields.get(q.getTerm().field());
           if (b != null) {
+            q = (TermQuery) q.clone();
             q.setBoost(b*q.getBoost());
           }
+          newQ.add(q, clause.getOccur());
         }
+        boostedQuery = newQ.build();
       }
       return boostedQuery;
     }
@@ -391,17 +397,18 @@ public class MoreLikeThisHandler extends
       }
 
       // exclude current document from results
-      realMLTQuery = new BooleanQuery();
+      BooleanQuery.Builder realMLTQuery = new BooleanQuery.Builder();
       realMLTQuery.add(boostedMLTQuery, BooleanClause.Occur.MUST);
       realMLTQuery.add(
           new TermQuery(new Term(uniqueKeyField.getName(), uniqueKeyField.getType().storedToIndexed(doc.getField(uniqueKeyField.getName())))), 
             BooleanClause.Occur.MUST_NOT);
+      this.realMLTQuery = realMLTQuery.build();
       
       DocListAndSet results = new DocListAndSet();
       if (this.needDocSet) {
-        results = searcher.getDocListAndSet(realMLTQuery, filters, null, start, rows, flags);
+        results = searcher.getDocListAndSet(this.realMLTQuery, filters, null, start, rows, flags);
       } else {
-        results.docList = searcher.getDocList(realMLTQuery, filters, null, start, rows, flags);
+        results.docList = searcher.getDocList(this.realMLTQuery, filters, null, start, rows, flags);
       }
       return results;
     }
@@ -456,12 +463,12 @@ public class MoreLikeThisHandler extends
         mltquery = (BooleanQuery) getBoostedQuery(mltquery);
         
         // exclude current document from results
-        BooleanQuery mltQuery = new BooleanQuery();
+        BooleanQuery.Builder mltQuery = new BooleanQuery.Builder();
         mltQuery.add(mltquery, BooleanClause.Occur.MUST);
         
         mltQuery.add(
             new TermQuery(new Term(uniqueKeyField.getName(), uniqueId)), BooleanClause.Occur.MUST_NOT);
-        result.add(uniqueId, mltQuery);
+        result.add(uniqueId, mltQuery.build());
       }
 
       return result;
@@ -469,9 +476,9 @@ public class MoreLikeThisHandler extends
     
     private void fillInterestingTermsFromMLTQuery( Query query, List<InterestingTerm> terms )
     { 
-      List clauses = ((BooleanQuery)query).clauses();
-      for( Object o : clauses ) {
-        TermQuery q = (TermQuery)((BooleanClause)o).getQuery();
+      Collection<BooleanClause> clauses = ((BooleanQuery)query).clauses();
+      for( BooleanClause o : clauses ) {
+        TermQuery q = (TermQuery) o.getQuery();
         InterestingTerm it = new InterestingTerm();
         it.boost = q.getBoost();
         it.term = q.getTerm();

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java Thu Jun 18 07:14:05 2015
@@ -39,6 +39,7 @@ import org.apache.lucene.index.Term;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.LeafFieldComparator;
+import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.ScoreDoc;
 import org.apache.lucene.search.Scorer;
@@ -157,7 +158,7 @@ public class QueryComponent extends Sear
       Query q = parser.getQuery();
       if (q == null) {
         // normalize a null query to a query that matches nothing
-        q = new BooleanQuery();
+        q = new MatchNoDocsQuery();
       }
 
       rb.setQuery( q );

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java Thu Jun 18 07:14:05 2015
@@ -142,8 +142,7 @@ public class QueryElevationComponent ext
       this.ids = new HashSet<>();
       this.excludeIds = new HashSet<>();
 
-      this.include = new BooleanQuery();
-      this.include.setBoost(0);
+      BooleanQuery.Builder include = new BooleanQuery.Builder();
       this.priority = new HashMap<>();
       int max = elevate.size() + 5;
       for (String id : elevate) {
@@ -153,6 +152,8 @@ public class QueryElevationComponent ext
         include.add(tq, BooleanClause.Occur.SHOULD);
         this.priority.put(new BytesRef(id), max--);
       }
+      this.include = include.build();
+      this.include.setBoost(0);
 
       if (exclude == null || exclude.isEmpty()) {
         this.exclude = null;
@@ -421,7 +422,8 @@ public class QueryElevationComponent ext
         //we only want these results
         rb.setQuery(booster.include);
       } else {
-        BooleanQuery newq = new BooleanQuery(true);
+        BooleanQuery.Builder newq = new BooleanQuery.Builder();
+        newq.setDisableCoord(true);
         newq.add(query, BooleanClause.Occur.SHOULD);
         newq.add(booster.include, BooleanClause.Occur.SHOULD);
         if (booster.exclude != null) {
@@ -435,7 +437,7 @@ public class QueryElevationComponent ext
             rb.req.getContext().put(EXCLUDED, booster.excludeIds);
           }
         }
-        rb.setQuery(newq);
+        rb.setQuery(newq.build());
       }
 
       ElevationComparatorSource comparator = new ElevationComparatorSource(booster);

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java Thu Jun 18 07:14:05 2015
@@ -149,7 +149,7 @@ public abstract class SolrQueryParserBas
     try {
       // TopLevelQuery is a Query followed by the end-of-input (EOF)
       Query res = TopLevelQuery(null);  // pass null so we can tell later if an explicit field was provided or not
-      return res!=null ? res : newBooleanQuery(false);
+      return res!=null ? res : newBooleanQuery(false).build();
     }
     catch (ParseException | TokenMgrError tme) {
       throw new SyntaxError("Cannot parse '" +query+ "': " + tme.getMessage(), tme);
@@ -321,7 +321,7 @@ public abstract class SolrQueryParserBas
     if (clauses.size() > 0 && conj == CONJ_AND) {
       BooleanClause c = clauses.get(clauses.size()-1);
       if (!c.isProhibited())
-        c.setOccur(BooleanClause.Occur.MUST);
+        clauses.set(clauses.size() - 1, new BooleanClause(c.getQuery(), BooleanClause.Occur.MUST));
     }
 
     if (clauses.size() > 0 && operator == AND_OPERATOR && conj == CONJ_OR) {
@@ -331,7 +331,7 @@ public abstract class SolrQueryParserBas
       // this modification a OR b would parsed as +a OR b
       BooleanClause c = clauses.get(clauses.size()-1);
       if (!c.isProhibited())
-        c.setOccur(BooleanClause.Occur.SHOULD);
+        clauses.set(clauses.size() - 1, new BooleanClause(c.getQuery(), BooleanClause.Occur.SHOULD));
     }
 
     // We might have been passed a null query; the term might have been
@@ -509,11 +509,11 @@ public abstract class SolrQueryParserBas
     if (clauses.size()==0) {
       return null; // all clause words were filtered away by the analyzer.
     }
-    BooleanQuery query = newBooleanQuery(disableCoord);
+    BooleanQuery.Builder query = newBooleanQuery(disableCoord);
     for(final BooleanClause clause: clauses) {
       query.add(clause);
     }
-    return query;
+    return query.build();
   }
 
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/CurrencyField.java Thu Jun 18 07:14:05 2015
@@ -335,11 +335,11 @@ public class CurrencyField extends Field
        p1 == null ? null : p1.getAmount() + "", 
        p2 == null ? null : p2.getAmount() + "",
        minInclusive, maxInclusive);
-    final BooleanQuery docsInRange = new BooleanQuery();
+    final BooleanQuery.Builder docsInRange = new BooleanQuery.Builder();
     docsInRange.add(docsWithValues, Occur.FILTER);
     docsInRange.add(vsRangeFilter, Occur.FILTER);
 
-    return new SolrConstantScoreQuery(new QueryWrapperFilter(docsInRange));
+    return new SolrConstantScoreQuery(new QueryWrapperFilter(docsInRange.build()));
   }
 
   @Override

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/LatLonType.java Thu Jun 18 07:14:05 2015
@@ -99,13 +99,14 @@ public class LatLonType extends Abstract
 
     SchemaField latSF = subField(field, LAT, parser.getReq().getSchema());
     SchemaField lonSF = subField(field, LON, parser.getReq().getSchema());
-    BooleanQuery result = new BooleanQuery(true);
+    BooleanQuery.Builder result = new BooleanQuery.Builder();
+    result.setDisableCoord(true);
     // points must currently be ordered... should we support specifying any two opposite corner points?
     result.add(latSF.getType().getRangeQuery(parser, latSF,
         Double.toString(p1.getY()), Double.toString(p2.getY()), minInclusive, maxInclusive), BooleanClause.Occur.MUST);
     result.add(lonSF.getType().getRangeQuery(parser, lonSF,
         Double.toString(p1.getX()), Double.toString(p2.getX()), minInclusive, maxInclusive), BooleanClause.Occur.MUST);
-    return result;
+    return result.build();
   }
 
   @Override
@@ -114,12 +115,13 @@ public class LatLonType extends Abstract
 
     SchemaField latSF = subField(field, LAT, parser.getReq().getSchema());
     SchemaField lonSF = subField(field, LON, parser.getReq().getSchema());
-    BooleanQuery result = new BooleanQuery(true);
+    BooleanQuery.Builder result = new BooleanQuery.Builder();
+    result.setDisableCoord(true);
     result.add(latSF.getType().getFieldQuery(parser, latSF,
         Double.toString(p1.getY())), BooleanClause.Occur.MUST);
     result.add(lonSF.getType().getFieldQuery(parser, lonSF,
         Double.toString(p1.getX())), BooleanClause.Occur.MUST);
-    return result;
+    return result.build();
   }
 
 
@@ -159,7 +161,7 @@ public class LatLonType extends Abstract
 
 
     if (options.bbox) {
-      BooleanQuery result = new BooleanQuery();
+      BooleanQuery.Builder result = new BooleanQuery.Builder();
 
       Query latRange = latSF.getType().getRangeQuery(parser, latSF,
                 String.valueOf(latMin),
@@ -174,7 +176,7 @@ public class LatLonType extends Abstract
                 true, true);
         if (lon2Min != -180 || lon2Max != 180) {
           // another valid longitude range
-          BooleanQuery bothLons = new BooleanQuery();
+          BooleanQuery.Builder bothLons = new BooleanQuery.Builder();
           bothLons.add(lonRange, BooleanClause.Occur.SHOULD);
 
           lonRange = lonSF.getType().getRangeQuery(parser, lonSF,
@@ -183,13 +185,13 @@ public class LatLonType extends Abstract
                 true, true);
           bothLons.add(lonRange, BooleanClause.Occur.SHOULD);
 
-          lonRange = bothLons;
+          lonRange = bothLons.build();
         }
 
         result.add(lonRange, BooleanClause.Occur.MUST);
       }
 
-      spatial.bboxQuery = result;
+      spatial.bboxQuery = result.build();
     }
 
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/PointType.java Thu Jun 18 07:14:05 2015
@@ -137,26 +137,28 @@ public class PointType extends Coordinat
     String[] p1 = parseCommaSeparatedList(part1, dimension);
     String[] p2 = parseCommaSeparatedList(part2, dimension);
 
-    BooleanQuery result = new BooleanQuery(true);
+    BooleanQuery.Builder result = new BooleanQuery.Builder();
+    result.setDisableCoord(true);
     for (int i = 0; i < dimension; i++) {
       SchemaField subSF = subField(field, i, schema);
       // points must currently be ordered... should we support specifying any two opposite corner points?
       result.add(subSF.getType().getRangeQuery(parser, subSF, p1[i], p2[i], minInclusive, maxInclusive), BooleanClause.Occur.MUST);
     }
-    return result;
+    return result.build();
   }
 
   @Override
   public Query getFieldQuery(QParser parser, SchemaField field, String externalVal) {
     String[] p1 = parseCommaSeparatedList(externalVal, dimension);
     //TODO: should we assert that p1.length == dimension?
-    BooleanQuery bq = new BooleanQuery(true);
+    BooleanQuery.Builder bq = new BooleanQuery.Builder();
+    bq.setDisableCoord(true);
     for (int i = 0; i < dimension; i++) {
       SchemaField sf = subField(field, i, schema);
       Query tq = sf.getType().getFieldQuery(parser, sf, p1[i]);
       bq.add(tq, BooleanClause.Occur.MUST);
     }
-    return bq;
+    return bq.build();
   }
 
   /**
@@ -188,7 +190,7 @@ public class PointType extends Coordinat
       // points must currently be ordered... should we support specifying any two opposite corner points?
       return subSF.getType().getRangeQuery(parser, subSF, lower, upper, true, true);
     } else {
-      BooleanQuery tmp = new BooleanQuery();
+      BooleanQuery.Builder tmp = new BooleanQuery.Builder();
       //TODO: Handle distance measures, as this assumes Euclidean
       double[] ur = vectorBoxCorner(point, null, options.distance, true);
       double[] ll = vectorBoxCorner(point, null, options.distance, false);
@@ -197,7 +199,7 @@ public class PointType extends Coordinat
         Query range = subSF.getType().getRangeQuery(parser, subSF, String.valueOf(ll[i]), String.valueOf(ur[i]), true, true);
         tmp.add(range, BooleanClause.Occur.MUST);
       }
-      return tmp;
+      return tmp.build();
     }
   }
 

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=1686145&r1=1686144&r2=1686145&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 Thu Jun 18 07:14:05 2015
@@ -105,7 +105,8 @@ public class DisMaxQParser extends QPars
     /* the main query we will execute.  we disable the coord because
      * this query is an artificial construct
      */
-    BooleanQuery query = new BooleanQuery(true);
+    BooleanQuery.Builder query = new BooleanQuery.Builder();
+    query.setDisableCoord(true);
 
     boolean notBlank = addMainQuery(query, solrParams);
     if (!notBlank)
@@ -113,10 +114,10 @@ public class DisMaxQParser extends QPars
     addBoostQuery(query, solrParams);
     addBoostFunctions(query, solrParams);
 
-    return query;
+    return query.build();
   }
 
-  protected void addBoostFunctions(BooleanQuery query, SolrParams solrParams) throws SyntaxError {
+  protected void addBoostFunctions(BooleanQuery.Builder query, SolrParams solrParams) throws SyntaxError {
     String[] boostFuncs = solrParams.getParams(DisMaxParams.BF);
     if (null != boostFuncs && 0 != boostFuncs.length) {
       for (String boostFunc : boostFuncs) {
@@ -134,7 +135,7 @@ public class DisMaxQParser extends QPars
     }
   }
 
-  protected void addBoostQuery(BooleanQuery query, SolrParams solrParams) throws SyntaxError {
+  protected void addBoostQuery(BooleanQuery.Builder query, SolrParams solrParams) throws SyntaxError {
     boostParams = solrParams.getParams(DisMaxParams.BQ);
     //List<Query> boostQueries = SolrPluginUtils.parseQueryStrings(req, boostParams);
     boostQueries = null;
@@ -169,7 +170,7 @@ public class DisMaxQParser extends QPars
   }
 
   /** Adds the main query to the query argument. If it's blank then false is returned. */
-  protected boolean addMainQuery(BooleanQuery query, SolrParams solrParams) throws SyntaxError {
+  protected boolean addMainQuery(BooleanQuery.Builder query, SolrParams solrParams) throws SyntaxError {
     Map<String, Float> phraseFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.PF));
     float tiebreaker = solrParams.getFloat(DisMaxParams.TIE, 0.0f);
 
@@ -240,10 +241,10 @@ public class DisMaxQParser extends QPars
     Query query = dis;
 
     if (dis instanceof BooleanQuery) {
-      BooleanQuery t = new BooleanQuery();
+      BooleanQuery.Builder t = new BooleanQuery.Builder();
       SolrPluginUtils.flattenBooleanQuery(t, (BooleanQuery) dis);
       SolrPluginUtils.setMinShouldMatch(t, minShouldMatch);
-      query = t;
+      query = t.build();
     }
     return query;
   }

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=1686145&r1=1686144&r2=1686145&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 Thu Jun 18 07:14:05 2015
@@ -142,7 +142,8 @@ public class ExtendedDismaxQParser exten
     /* the main query we will execute.  we disable the coord because
      * this query is an artificial construct
      */
-    BooleanQuery query = new BooleanQuery(true);
+    BooleanQuery.Builder query = new BooleanQuery.Builder();
+    query.setDisableCoord(true);
     
     /* * * Main User Query * * */
     parsedUserQuery = null;
@@ -209,13 +210,13 @@ public class ExtendedDismaxQParser exten
     //
     // create a boosted query (scores multiplied by boosts)
     //
-    Query topQuery = query;
+    Query topQuery = query.build();
     List<ValueSource> boosts = getMultiplicativeBoosts();
     if (boosts.size()>1) {
       ValueSource prod = new ProductFloatFunction(boosts.toArray(new ValueSource[boosts.size()]));
-      topQuery = new BoostedQuery(query, prod);
+      topQuery = new BoostedQuery(topQuery, prod);
     } else if (boosts.size() == 1) {
-      topQuery = new BoostedQuery(query, boosts.get(0));
+      topQuery = new BoostedQuery(topQuery, boosts.get(0));
     }
     
     return topQuery;
@@ -225,7 +226,7 @@ public class ExtendedDismaxQParser exten
    * Adds shingled phrase queries to all the fields specified in the pf, pf2 anf pf3 parameters
    * 
    */
-  protected void addPhraseFieldQueries(BooleanQuery query, List<Clause> clauses,
+  protected void addPhraseFieldQueries(BooleanQuery.Builder query, List<Clause> clauses,
       ExtendedDismaxConfiguration config) throws SyntaxError {
 
     // sloppy phrase queries for proximity
@@ -296,10 +297,10 @@ public class ExtendedDismaxQParser exten
     Query query = up.parse(escapedUserQuery);
     
     if (query instanceof BooleanQuery) {
-      BooleanQuery t = new BooleanQuery();
+      BooleanQuery.Builder t = new BooleanQuery.Builder();
       SolrPluginUtils.flattenBooleanQuery(t, (BooleanQuery)query);
       SolrPluginUtils.setMinShouldMatch(t, config.minShouldMatch);
-      query = t;
+      query = t.build();
     }
     return query;
   }
@@ -340,7 +341,7 @@ public class ExtendedDismaxQParser exten
     // were explicit operators (except for AND).
     boolean doMinMatched = doMinMatched(clauses, config.lowercaseOperators);
     if (doMinMatched && query instanceof BooleanQuery) {
-      SolrPluginUtils.setMinShouldMatch((BooleanQuery)query, config.minShouldMatch);
+      query = SolrPluginUtils.setMinShouldMatch((BooleanQuery)query, config.minShouldMatch);
     }
     return query;
   }
@@ -527,7 +528,7 @@ public class ExtendedDismaxQParser exten
    * @param shingleSize how big the phrases should be, 0 means a single phrase
    * @param tiebreaker tie breaker value for the DisjunctionMaxQueries
    */
-  protected void addShingledPhraseQueries(final BooleanQuery mainQuery, 
+  protected void addShingledPhraseQueries(final BooleanQuery.Builder mainQuery, 
       final List<Clause> clauses,
       final Collection<FieldParams> fields,
       int shingleSize,
@@ -1150,11 +1151,12 @@ public class ExtendedDismaxQParser exten
           return q;
         } else {
           // should we disable coord?
-          BooleanQuery q = new BooleanQuery(disableCoord);
+          BooleanQuery.Builder q = new BooleanQuery.Builder();
+          q.setDisableCoord(disableCoord);
           for (Query sub : lst) {
             q.add(sub, BooleanClause.Occur.SHOULD);
           }
-          return q;
+          return q.build();
         }
       } else {
         
@@ -1236,7 +1238,7 @@ public class ExtendedDismaxQParser exten
             if (query instanceof BooleanQuery) {
               BooleanQuery bq = (BooleanQuery) query;
               if (!bq.isCoordDisabled()) {
-                SolrPluginUtils.setMinShouldMatch(bq, minShouldMatch);
+                query = SolrPluginUtils.setMinShouldMatch(bq, minShouldMatch);
               }
             }
             if (query instanceof PhraseQuery) {

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/LuceneQueryOptimizer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/LuceneQueryOptimizer.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/LuceneQueryOptimizer.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/LuceneQueryOptimizer.java Thu Jun 18 07:14:05 2015
@@ -62,8 +62,8 @@ class LuceneQueryOptimizer {
                           )
     throws IOException {
 
-    BooleanQuery query = new BooleanQuery();
-    BooleanQuery filterQuery = null;
+    BooleanQuery.Builder query = new BooleanQuery.Builder();
+    BooleanQuery.Builder filterQuery = null;
 
     for (BooleanClause c : original.clauses()) {
 
@@ -83,7 +83,7 @@ if (c.query instanceof TermQuery) {
           && (searcher.docFreq(((TermQuery)q).getTerm())
               / (float)searcher.maxDoc()) >= threshold) { // check threshold
         if (filterQuery == null)
-          filterQuery = new BooleanQuery();
+          filterQuery = new BooleanQuery.Builder();
         filterQuery.add(q, BooleanClause.Occur.MUST);    // filter it
 //System.out.println("WooHoo... qualified to be hoisted to a filter!");
       } else {
@@ -97,7 +97,7 @@ if (c.query instanceof TermQuery) {
         filter = (Filter)cache.get(filterQuery);
       }
       if (filter == null) {                       // miss
-        filter = new QueryWrapperFilter(new CachingWrapperQuery(filterQuery)); // construct new entry
+        filter = new QueryWrapperFilter(new CachingWrapperQuery(filterQuery.build())); // construct new entry
         synchronized (cache) {
           cache.put(filterQuery, filter);         // cache it
         }
@@ -107,10 +107,10 @@ if (c.query instanceof TermQuery) {
     // YCS: added code to pass out optimized query and filter
     // so they can be used with Hits
     if (queryOut != null && filterOut != null) {
-      queryOut[0] = query; filterOut[0] = filter;
+      queryOut[0] = query.build(); filterOut[0] = filter;
       return null;
     } else {
-      return searcher.search(new FilteredQuery(query, filter), numHits);
+      return searcher.search(new FilteredQuery(query.build(), filter), numHits);
     }
 
   }

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=1686145&r1=1686144&r2=1686145&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 Thu Jun 18 07:14:05 2015
@@ -60,24 +60,25 @@ public class MaxScoreQParser extends Luc
     BooleanQuery obq = (BooleanQuery)q;
     Collection<Query> should = new ArrayList<>();
     Collection<BooleanClause> prohibOrReq = new ArrayList<>();
-    BooleanQuery newq = new BooleanQuery();
+    BooleanQuery.Builder newqb = new BooleanQuery.Builder();
 
-    for (BooleanClause clause : obq.getClauses()) {
+    for (BooleanClause clause : obq) {
       if(clause.isProhibited() || clause.isRequired()) {
         prohibOrReq.add(clause);
       } else {
-        BooleanQuery bq = new BooleanQuery();
+        BooleanQuery.Builder bq = new BooleanQuery.Builder();
         bq.add(clause);
-        should.add(bq);
+        should.add(bq.build());
       }
     }
     if (should.size() > 0) {
       DisjunctionMaxQuery dmq = new DisjunctionMaxQuery(should, tie);
-      newq.add(dmq, BooleanClause.Occur.SHOULD);
+      newqb.add(dmq, BooleanClause.Occur.SHOULD);
     }
     for(BooleanClause c : prohibOrReq) {
-      newq.add(c);
+      newqb.add(c);
     }
+    Query newq = newqb.build();
     newq.setBoost(obq.getBoost());
     return newq;
   }

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=1686145&r1=1686144&r2=1686145&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 Thu Jun 18 07:14:05 2015
@@ -18,11 +18,12 @@
 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.MatchAllDocsQuery;
 import org.apache.lucene.search.Query;
 
-import java.util.List;
+import java.util.Collection;
 
 /**
  *
@@ -33,7 +34,7 @@ public class QueryUtils {
   public static boolean isNegative(Query q) {
     if (!(q instanceof BooleanQuery)) return false;
     BooleanQuery bq = (BooleanQuery)q;
-    List<BooleanClause> clauses = bq.clauses();
+    Collection<BooleanClause> clauses = bq.clauses();
     if (clauses.size()==0) return false;
     for (BooleanClause clause : clauses) {
       if (!clause.isProhibited()) return false;
@@ -64,7 +65,7 @@ public class QueryUtils {
     if (!(q instanceof BooleanQuery)) return q;
     BooleanQuery bq = (BooleanQuery)q;
 
-    List<BooleanClause> clauses = bq.clauses();
+    Collection<BooleanClause> clauses = bq.clauses();
     if (clauses.size()==0) return q;
 
 
@@ -74,20 +75,22 @@ public class QueryUtils {
 
     if (clauses.size()==1) {
       // if only one clause, dispense with the wrapping BooleanQuery
-      Query negClause = clauses.get(0).getQuery();
+      Query negClause = clauses.iterator().next().getQuery();
       // we shouldn't need to worry about adjusting the boosts since the negative
       // clause would have never been selected in a positive query, and hence would
       // not contribute to a score.
       return negClause;
     } else {
-      BooleanQuery newBq = new BooleanQuery(bq.isCoordDisabled());
-      newBq.setBoost(bq.getBoost());
+      BooleanQuery.Builder newBqB = new BooleanQuery.Builder();
+      newBqB.setDisableCoord(bq.isCoordDisabled());
       // ignore minNrShouldMatch... it doesn't make sense for a negative query
 
       // the inverse of -a -b is a OR b
       for (BooleanClause clause : clauses) {
-        newBq.add(clause.getQuery(), BooleanClause.Occur.SHOULD);
+        newBqB.add(clause.getQuery(), BooleanClause.Occur.SHOULD);
       }
+      Query newBq = newBqB.build();
+      newBq.setBoost(bq.getBoost());
       return newBq;
     }
   }
@@ -106,9 +109,17 @@ public class QueryUtils {
    * The query passed in *must* be a negative query.
    */
   public static Query fixNegativeQuery(Query q) {
-    BooleanQuery newBq = (BooleanQuery)q.clone();
-    newBq.add(new MatchAllDocsQuery(), BooleanClause.Occur.MUST);
-    return newBq;    
+    BooleanQuery bq = (BooleanQuery) q;
+    BooleanQuery.Builder newBqB = new BooleanQuery.Builder();
+    newBqB.setDisableCoord(bq.isCoordDisabled());
+    newBqB.setMinimumNumberShouldMatch(bq.getMinimumNumberShouldMatch());
+    for (BooleanClause clause : bq) {
+      newBqB.add(clause);
+    }
+    newBqB.add(new MatchAllDocsQuery(), Occur.MUST);
+    BooleanQuery newBq = newBqB.build();
+    newBq.setBoost(bq.getBoost());
+    return newBq;
   }
 
 }

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=1686145&r1=1686144&r2=1686145&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 Thu Jun 18 07:14:05 2015
@@ -185,7 +185,8 @@ public class SimpleQParserPlugin extends
 
     @Override
     protected Query newPrefixQuery(String text) {
-      BooleanQuery bq = new BooleanQuery(true);
+      BooleanQuery.Builder bq = new BooleanQuery.Builder();
+      bq.setDisableCoord(true);
 
       for (Map.Entry<String, Float> entry : weights.entrySet()) {
         String field = entry.getKey();
@@ -208,7 +209,7 @@ public class SimpleQParserPlugin extends
         bq.add(prefix, BooleanClause.Occur.SHOULD);
       }
 
-      return simplify(bq);
+      return simplify(bq.build());
     }
 
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Thu Jun 18 07:14:05 2015
@@ -2106,10 +2106,10 @@ public class SolrIndexSearcher extends I
       // NOTE: we cannot use FilteredQuery, because BitDocSet assumes it will never 
       // have deleted documents, but UninvertedField's doNegative has sets with deleted docs
       TotalHitCountCollector collector = new TotalHitCountCollector();
-      BooleanQuery bq = new BooleanQuery();
+      BooleanQuery.Builder bq = new BooleanQuery.Builder();
       bq.add(QueryUtils.makeQueryable(a), BooleanClause.Occur.MUST);
       bq.add(new ConstantScoreQuery(b.getTopFilter()), BooleanClause.Occur.MUST);
-      super.search(bq, collector);
+      super.search(bq.build(), collector);
       return collector.getTotalHits();
     }
   }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/TermsQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/TermsQParserPlugin.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/TermsQParserPlugin.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/TermsQParserPlugin.java Thu Jun 18 07:14:05 2015
@@ -27,6 +27,7 @@ import org.apache.lucene.search.BooleanC
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.DocValuesTermsQuery;
 import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.MatchNoDocsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.QueryWrapperFilter;
 import org.apache.lucene.search.TermQuery;
@@ -73,11 +74,12 @@ public class TermsQParserPlugin extends
     booleanQuery {
       @Override
       Filter makeFilter(String fname, BytesRef[] byteRefs) {
-        BooleanQuery bq = new BooleanQuery(true);
+        BooleanQuery.Builder bq = new BooleanQuery.Builder();
+        bq.setDisableCoord(true);
         for (BytesRef byteRef : byteRefs) {
           bq.add(new TermQuery(new Term(fname, byteRef)), BooleanClause.Occur.SHOULD);
         }
-        return new QueryWrapperFilter(bq);
+        return new QueryWrapperFilter(bq.build());
       }
     },
     automaton {
@@ -114,7 +116,7 @@ public class TermsQParserPlugin extends
         if (sepIsSpace)
           qstr = qstr.trim();
         if (qstr.length() == 0)
-          return new BooleanQuery();//Matches nothing.
+          return new MatchNoDocsQuery();
         final String[] splitVals = sepIsSpace ? qstr.split("\\s+") : qstr.split(Pattern.quote(separator), -1);
         assert splitVals.length > 0;
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/facet/FacetRequest.java Thu Jun 18 07:14:05 2015
@@ -417,9 +417,9 @@ class FacetProcessor<FacetRequestT exten
   public static Query getFieldMissingQuery(SolrIndexSearcher searcher, String fieldName) throws IOException {
     SchemaField sf = searcher.getSchema().getField(fieldName);
     Query hasVal = sf.getType().getRangeQuery(null, sf, null, null, false, false);
-    BooleanQuery noVal = new BooleanQuery();
+    BooleanQuery.Builder noVal = new BooleanQuery.Builder();
     noVal.add(hasVal, BooleanClause.Occur.MUST_NOT);
-    return noVal;
+    return noVal.build();
   }
 
 }

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java Thu Jun 18 07:14:05 2015
@@ -241,11 +241,11 @@ public class DirectUpdateHandler2 extend
             // SolrCore.verbose("updateDocument",updateTerm,"DONE");
             
             if (del) { // ensure id remains unique
-              BooleanQuery bq = new BooleanQuery();
+              BooleanQuery.Builder bq = new BooleanQuery.Builder();
               bq.add(new BooleanClause(new TermQuery(updateTerm),
                   Occur.MUST_NOT));
               bq.add(new BooleanClause(new TermQuery(idTerm), Occur.MUST));
-              writer.deleteDocuments(new DeleteByQueryWrapper(bq, core.getLatestSchema()));
+              writer.deleteDocuments(new DeleteByQueryWrapper(bq.build(), core.getLatestSchema()));
             }
             
             // Add to the transaction log *after* successfully adding to the
@@ -355,14 +355,14 @@ public class DirectUpdateHandler2 extend
 
       // Make sure not to delete newer versions
       if (ulog != null && cmd.getVersion() != 0 && cmd.getVersion() != -Long.MAX_VALUE) {
-        BooleanQuery bq = new BooleanQuery();
+        BooleanQuery.Builder bq = new BooleanQuery.Builder();
         bq.add(q, Occur.MUST);
         SchemaField sf = ulog.getVersionInfo().getVersionField();
         ValueSource vs = sf.getType().getValueSource(sf, null);
         ValueSourceRangeFilter filt = new ValueSourceRangeFilter(vs, null, Long.toString(Math.abs(cmd.getVersion())), true, true);
         FunctionRangeQuery range = new FunctionRangeQuery(filt);
         bq.add(range, Occur.MUST);
-        q = bq;
+        q = bq.build();
       }
 
       return q;

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=1686145&r1=1686144&r2=1686145&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 Thu Jun 18 07:14:05 2015
@@ -590,10 +590,10 @@ public class SolrPluginUtils {
    * as clauses to just make them all "required"
    * </p>
    */
-  public static void setMinShouldMatch(BooleanQuery q, String spec) {
+  public static void setMinShouldMatch(BooleanQuery.Builder q, String spec) {
 
     int optionalClauses = 0;
-    for (BooleanClause c : q.clauses()) {
+    for (BooleanClause c : q.build().clauses()) {
       if (c.getOccur() == Occur.SHOULD) {
         optionalClauses++;
       }
@@ -605,6 +605,16 @@ public class SolrPluginUtils {
     }
   }
 
+  public static BooleanQuery setMinShouldMatch(BooleanQuery q, String spec) {
+    BooleanQuery.Builder builder = new BooleanQuery.Builder();
+    builder.setDisableCoord(q.isCoordDisabled());
+    for (BooleanClause clause : q) {
+      builder.add(clause);
+    }
+    setMinShouldMatch(builder, spec);
+    return builder.build();
+  }
+
   // private static Pattern spaceAroundLessThanPattern = Pattern.compile("\\s*<\\s*");
   private static Pattern spaceAroundLessThanPattern = Pattern.compile("(\\s+<\\s*)|(\\s*<\\s+)");
   private static Pattern spacePattern = Pattern.compile(" ");
@@ -664,7 +674,7 @@ public class SolrPluginUtils {
    * so do not attempt to reuse it.
    * </p>
    */
-  public static void flattenBooleanQuery(BooleanQuery to, BooleanQuery from) {
+  public static void flattenBooleanQuery(BooleanQuery.Builder to, BooleanQuery from) {
 
     for (BooleanClause clause : from.clauses()) {
 

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/QueryResultKeyTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/QueryResultKeyTest.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/QueryResultKeyTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/QueryResultKeyTest.java Thu Jun 18 07:14:05 2015
@@ -40,16 +40,16 @@ public class QueryResultKeyTest extends
     // of filters is in a different order
     
     Sort sort = new Sort(new SortField("test", SortField.Type.INT));
-    BooleanQuery query = new BooleanQuery();
+    BooleanQuery.Builder query = new BooleanQuery.Builder();
     query.add(new TermQuery(new Term("test", "field")), Occur.MUST);
     
     List<Query> filters = Arrays.<Query>asList(new TermQuery(new Term("test", "field")),
                                                new TermQuery(new Term("test2", "field2")));
-    QueryResultKey qrk1 = new QueryResultKey(query , filters, sort, 1);
+    QueryResultKey qrk1 = new QueryResultKey(query.build() , filters, sort, 1);
     
     List<Query> filters2 = Arrays.<Query>asList(new TermQuery(new Term("test2", "field2")),
                                                 new TermQuery(new Term("test", "field")));
-    QueryResultKey qrk2 = new QueryResultKey(query , filters2, sort, 1);
+    QueryResultKey qrk2 = new QueryResultKey(query.build() , filters2, sort, 1);
     assertKeyEquals(qrk1, qrk2);
   }
 

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java Thu Jun 18 07:14:05 2015
@@ -176,8 +176,7 @@ public class PolyFieldTest extends SolrT
     assertTrue(q instanceof BooleanQuery);
     //should have two clauses, one for 35.0 and the other for -79.34
     BooleanQuery bq = (BooleanQuery) q;
-    BooleanClause[] clauses = bq.getClauses();
-    assertEquals(clauses.length, 2);
+    assertEquals(2, bq.clauses().size());
     clearIndex();
   }
 

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=1686145&r1=1686144&r2=1686145&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 Thu Jun 18 07:14:05 2015
@@ -1081,7 +1081,7 @@ public class TestExtendedDismaxParser ex
   }
 
   private boolean containsClause(BooleanQuery query, String field, String value, int boost, boolean fuzzy) {
-    for(BooleanClause clause:query.getClauses()) {
+    for(BooleanClause clause:query) {
       if(containsClause(clause.getQuery(), field, value, boost, fuzzy)) {
         return true;
       }

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=1686145&r1=1686144&r2=1686145&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 Thu Jun 18 07:14:05 2015
@@ -108,9 +108,9 @@ 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().get(0).getQuery().getBoost();
+    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().get(0).getQuery().getBoost();
+    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);
@@ -121,9 +121,9 @@ 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().get(0).getQuery().getBoost();
+    fooClause = ((BooleanQuery)dmq.getDisjuncts().get(0)).clauses().iterator().next().getQuery().getBoost();
     assertEquals(2.0, fooClause, 1e-15);
-    barClause = ((BooleanQuery)dmq.getDisjuncts().get(1)).clauses().get(0).getQuery().getBoost();
+    barClause = ((BooleanQuery)dmq.getDisjuncts().get(1)).clauses().iterator().next().getQuery().getBoost();
     assertEquals(1.0, barClause, 1e-15);
     assertEquals(3.0, q.getBoost(), 1e-15);
   }
@@ -148,6 +148,6 @@ public class TestMaxScoreQueryParser ext
   }
 
   private BooleanClause[] clauses(Query q) {
-    return ((BooleanQuery) q).getClauses();
+    return ((BooleanQuery) q).clauses().toArray(new BooleanClause[0]);
   }
 }

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestQueryUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestQueryUtils.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestQueryUtils.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestQueryUtils.java Thu Jun 18 07:14:05 2015
@@ -26,6 +26,7 @@ import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.junit.BeforeClass;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -51,7 +52,7 @@ public class TestQueryUtils extends Abst
   public void positive(Query q) {
     assertFalse(QueryUtils.isNegative(q));
     assertTrue(QueryUtils.getAbs(q)==q);
-    List<BooleanClause> clauses = (q instanceof BooleanQuery) ? ((BooleanQuery)q).clauses() : null;
+    Collection<BooleanClause> clauses = (q instanceof BooleanQuery) ? ((BooleanQuery)q).clauses() : null;
     if (clauses != null) {
       if (clauses.size() != 0) {
         assertTrue(QueryUtils.makeQueryable(q)==q);
@@ -74,21 +75,21 @@ public class TestQueryUtils extends Abst
   public void testNegativeQueries() {
     TermQuery tq = new TermQuery(new Term("hi","there"));
     TermQuery tq2 = new TermQuery(new Term("wow","dude"));
-    BooleanQuery bq = new BooleanQuery();
+    BooleanQuery.Builder bq = new BooleanQuery.Builder();
 
     positive(tq);
     // positive(bq);
     bq.add(tq, BooleanClause.Occur.SHOULD);
-    positive(bq);
+    positive(bq.build());
     bq.add(tq2, BooleanClause.Occur.MUST_NOT);
-    positive(bq);
+    positive(bq.build());
 
-    bq = new BooleanQuery();
+    bq = new BooleanQuery.Builder();
     bq.add(tq,BooleanClause.Occur.MUST_NOT);
-    negative(bq);
+    negative(bq.build());
 
     bq.add(tq2,BooleanClause.Occur.MUST_NOT);
-    negative(bq);
+    negative(bq.build());
 
 
     String f = "name";  // name is whitespace tokenized

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSearchPerf.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSearchPerf.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSearchPerf.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestSearchPerf.java Thu Jun 18 07:14:05 2015
@@ -190,10 +190,10 @@ public class TestSearchPerf extends Abst
     createIndex(49999);
     doSetGen(10000, new TermQuery(new Term("foo1_s",t(0))) );
 
-    BooleanQuery bq = new BooleanQuery();
+    BooleanQuery.Builder bq = new BooleanQuery.Builder();
     bq.add(new TermQuery(new Term("foo2_s",t(0))), BooleanClause.Occur.SHOULD);
     bq.add(new TermQuery(new Term("foo2_s",t(1))), BooleanClause.Occur.SHOULD);
-    doSetGen(5000, bq); 
+    doSetGen(5000, bq.build()); 
   }
 
   /** test range query performance */

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java?rev=1686145&r1=1686144&r2=1686145&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java Thu Jun 18 07:14:05 2015
@@ -25,7 +25,6 @@ import org.apache.solr.search.SolrIndexS
 import org.apache.solr.search.DocList;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
-
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
@@ -38,6 +37,7 @@ import org.apache.lucene.search.BooleanC
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
@@ -257,7 +257,7 @@ public class SolrPluginUtilsTest extends
                out instanceof BooleanQuery);
     {
       BooleanQuery bq = (BooleanQuery)out;
-      List<BooleanClause> clauses = bq.clauses();
+      List<BooleanClause> clauses = new ArrayList<>(bq.clauses());
       assertEquals(t+" wrong number of clauses", 2,
                    clauses.size());
       Query sub = clauses.get(0).getQuery();
@@ -280,7 +280,7 @@ public class SolrPluginUtilsTest extends
                out instanceof BooleanQuery);
     {
       BooleanQuery bq = (BooleanQuery)out;
-      List<BooleanClause> clauses = bq.clauses();
+      List<BooleanClause> clauses = new ArrayList<>(bq.clauses());
       assertEquals(t+" wrong number of clauses", 2,
                    clauses.size());
       Query sub = clauses.get(0).getQuery();
@@ -364,29 +364,29 @@ public class SolrPluginUtilsTest extends
     assertEquals(9, calcMSM(12, "3<-25% 10<-3"));
     assertEquals(97, calcMSM(100, "3<-25% 10<-3"));
 
-    BooleanQuery q = new BooleanQuery();
+    BooleanQuery.Builder q = new BooleanQuery.Builder();
     q.add(new TermQuery(new Term("a","b")), Occur.SHOULD);
     q.add(new TermQuery(new Term("a","c")), Occur.SHOULD);
     q.add(new TermQuery(new Term("a","d")), Occur.SHOULD);
     q.add(new TermQuery(new Term("a","d")), Occur.SHOULD);
 
     SolrPluginUtils.setMinShouldMatch(q, "0");
-    assertEquals(0, q.getMinimumNumberShouldMatch());
+    assertEquals(0, q.build().getMinimumNumberShouldMatch());
         
     SolrPluginUtils.setMinShouldMatch(q, "1");
-    assertEquals(1, q.getMinimumNumberShouldMatch());
+    assertEquals(1, q.build().getMinimumNumberShouldMatch());
         
     SolrPluginUtils.setMinShouldMatch(q, "50%");
-    assertEquals(2, q.getMinimumNumberShouldMatch());
+    assertEquals(2, q.build().getMinimumNumberShouldMatch());
 
     SolrPluginUtils.setMinShouldMatch(q, "99");
-    assertEquals(4, q.getMinimumNumberShouldMatch());
+    assertEquals(4, q.build().getMinimumNumberShouldMatch());
 
     q.add(new TermQuery(new Term("a","e")), Occur.MUST);
     q.add(new TermQuery(new Term("a","f")), Occur.MUST);
 
     SolrPluginUtils.setMinShouldMatch(q, "50%");
-    assertEquals(2, q.getMinimumNumberShouldMatch());
+    assertEquals(2, q.build().getMinimumNumberShouldMatch());
         
   }