mirror of https://github.com/apache/lucene.git
LUCENE-8607: MatchAllDocsQuery can skip counting hits
This commit is contained in:
parent
42f13731b3
commit
fa025e1f78
|
@ -220,6 +220,9 @@ Optimizations
|
||||||
to early terminate the iterator if the minimum score is greater than the constant
|
to early terminate the iterator if the minimum score is greater than the constant
|
||||||
score. (Christophe Bismuth via Jim Ferenczi)
|
score. (Christophe Bismuth via Jim Ferenczi)
|
||||||
|
|
||||||
|
* LUCENE-8607: MatchAllDocsQuery can shortcut when total hit count is not
|
||||||
|
required (Alan Woodward, Adrien Grand)
|
||||||
|
|
||||||
======================= Lucene 7.7.0 =======================
|
======================= Lucene 7.7.0 =======================
|
||||||
|
|
||||||
Build
|
Build
|
||||||
|
|
|
@ -24,7 +24,6 @@ import org.apache.lucene.util.Bits;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A query that matches all documents.
|
* A query that matches all documents.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public final class MatchAllDocsQuery extends Query {
|
public final class MatchAllDocsQuery extends Query {
|
||||||
|
|
||||||
|
@ -47,6 +46,9 @@ public final class MatchAllDocsQuery extends Query {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BulkScorer bulkScorer(LeafReaderContext context) throws IOException {
|
public BulkScorer bulkScorer(LeafReaderContext context) throws IOException {
|
||||||
|
if (scoreMode == ScoreMode.TOP_SCORES) {
|
||||||
|
return super.bulkScorer(context);
|
||||||
|
}
|
||||||
final float score = score();
|
final float score = score();
|
||||||
final int maxDoc = context.reader().maxDoc();
|
final int maxDoc = context.reader().maxDoc();
|
||||||
return new BulkScorer() {
|
return new BulkScorer() {
|
||||||
|
|
|
@ -99,4 +99,27 @@ public class TestMatchAllDocsQuery extends LuceneTestCase {
|
||||||
iw.addDocument(doc);
|
iw.addDocument(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testEarlyTermination() throws IOException {
|
||||||
|
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
IndexWriter iw = new IndexWriter(dir, newIndexWriterConfig(analyzer).setMaxBufferedDocs(2).setMergePolicy(newLogMergePolicy()));
|
||||||
|
for (int i = 0; i < 500; i++) {
|
||||||
|
addDoc("doc" + i, iw);
|
||||||
|
}
|
||||||
|
IndexReader ir = DirectoryReader.open(iw);
|
||||||
|
|
||||||
|
IndexSearcher is = newSearcher(ir);
|
||||||
|
|
||||||
|
final int totalHitsThreshold = 200;
|
||||||
|
TopScoreDocCollector c = TopScoreDocCollector.create(10, null, totalHitsThreshold);
|
||||||
|
|
||||||
|
is.search(new MatchAllDocsQuery(), c);
|
||||||
|
assertEquals(totalHitsThreshold, c.totalHits);
|
||||||
|
|
||||||
|
iw.close();
|
||||||
|
ir.close();
|
||||||
|
dir.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue