Index: lucene/contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java =================================================================== --- lucene/contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java (revision 1207773) +++ lucene/contrib/queries/src/java/org/apache/lucene/search/BooleanFilter.java (working copy) @@ -47,8 +47,10 @@ public DocIdSet getDocIdSet(IndexReader reader) throws IOException { FixedBitSet res = null; + boolean hasShouldClauses = false; for (final FilterClause fc : clauses) { if (fc.getOccur() == Occur.SHOULD) { + hasShouldClauses = true; final DocIdSetIterator disi = getDISI(fc.getFilter(), reader); if (disi == null) continue; if (res == null) { @@ -57,6 +59,8 @@ res.or(disi); } } + if (hasShouldClauses && res == null) + return DocIdSet.EMPTY_DOCIDSET; for (final FilterClause fc : clauses) { if (fc.getOccur() == Occur.MUST_NOT) {