diff --git a/src/java/org/apache/lucene/search/FilteredQuery.java b/src/java/org/apache/lucene/search/FilteredQuery.java index cacb8a44fba..8e4a41588f7 100644 --- a/src/java/org/apache/lucene/search/FilteredQuery.java +++ b/src/java/org/apache/lucene/search/FilteredQuery.java @@ -103,7 +103,7 @@ extends Query { // return a filtering scorer public Scorer scorer(IndexReader indexReader, boolean scoreDocsInOrder, boolean topScorer) throws IOException { - final Scorer scorer = weight.scorer(indexReader, scoreDocsInOrder, false); + final Scorer scorer = weight.scorer(indexReader, true, false); if (scorer == null) { return null; } diff --git a/src/test/org/apache/lucene/search/TestFilteredQuery.java b/src/test/org/apache/lucene/search/TestFilteredQuery.java index 50a6263bfd6..444b287213f 100644 --- a/src/test/org/apache/lucene/search/TestFilteredQuery.java +++ b/src/test/org/apache/lucene/search/TestFilteredQuery.java @@ -198,6 +198,19 @@ public class TestFilteredQuery extends LuceneTestCase { assertEquals(0, hits.length); QueryUtils.check(query,searcher); } + + // Make sure BooleanQuery, which does out-of-order + // scoring, inside FilteredQuery, works + public void testBoolean2() throws Exception { + BooleanQuery bq = new BooleanQuery(); + Query query = new FilteredQuery(bq, + new SingleDocTestFilter(0)); + bq.add(new TermQuery(new Term("field", "one")), BooleanClause.Occur.SHOULD); + bq.add(new TermQuery(new Term("field", "two")), BooleanClause.Occur.SHOULD); + ScoreDoc[] hits = searcher.search(query, 1000).scoreDocs; + assertEquals(1, hits.length); + QueryUtils.check(query,searcher); + } }