Index: lucene/core/src/java/org/apache/lucene/search/ConstantScoreAutoRewrite.java =================================================================== --- lucene/core/src/java/org/apache/lucene/search/ConstantScoreAutoRewrite.java (revision 1526306) +++ lucene/core/src/java/org/apache/lucene/search/ConstantScoreAutoRewrite.java (working copy) @@ -96,17 +96,17 @@ final int size = col.pendingTerms.size(); if (col.hasCutOff) { return MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE.rewrite(reader, query); - } else if (size == 0) { - return getTopLevelQuery(); } else { final BooleanQuery bq = getTopLevelQuery(); - final BytesRefHash pendingTerms = col.pendingTerms; - final int sort[] = pendingTerms.sort(BytesRef.getUTF8SortedAsUnicodeComparator()); - for(int i = 0; i < size; i++) { - final int pos = sort[i]; - // docFreq is not used for constant score here, we pass 1 - // to explicitely set a fake value, so it's not calculated - addClause(bq, new Term(query.field, pendingTerms.get(pos, new BytesRef())), 1, 1.0f, col.array.termState[pos]); + if (size > 0) { + final BytesRefHash pendingTerms = col.pendingTerms; + final int sort[] = pendingTerms.sort(BytesRef.getUTF8SortedAsUnicodeComparator()); + for(int i = 0; i < size; i++) { + final int pos = sort[i]; + // docFreq is not used for constant score here, we pass 1 + // to explicitely set a fake value, so it's not calculated + addClause(bq, new Term(query.field, pendingTerms.get(pos, new BytesRef())), 1, 1.0f, col.array.termState[pos]); + } } // Strip scores final Query result = new ConstantScoreQuery(bq); Index: lucene/core/src/java/org/apache/lucene/search/ScoringRewrite.java =================================================================== --- lucene/core/src/java/org/apache/lucene/search/ScoringRewrite.java (revision 1526306) +++ lucene/core/src/java/org/apache/lucene/search/ScoringRewrite.java (working copy) @@ -87,9 +87,6 @@ @Override public Query rewrite(IndexReader reader, MultiTermQuery query) throws IOException { final BooleanQuery bq = SCORING_BOOLEAN_QUERY_REWRITE.rewrite(reader, query); - // TODO: if empty boolean query return NullQuery? - if (bq.clauses().isEmpty()) - return bq; // strip the scores off final Query result = new ConstantScoreQuery(bq); result.setBoost(query.getBoost());