Optimize scrolls for constant-score queries.
We currently optimize scroll when sort=_doc because docs are returned in order. But documents are also returned in order when sorting by score and the query gives constant scores. This optimization has the nice side-effect of also optimizing scrolls with the default `match_all` query.
This commit is contained in:
parent
4b0182932a
commit
745b977ce7
|
@ -112,6 +112,18 @@ public class QueryPhase implements SearchPhase {
|
||||||
aggregationPhase.execute(searchContext);
|
aggregationPhase.execute(searchContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean returnsDocsInOrder(Query query, Sort sort) {
|
||||||
|
if (sort == null || Sort.RELEVANCE.equals(sort)) {
|
||||||
|
// sort by score
|
||||||
|
// queries that return constant scores will return docs in index
|
||||||
|
// order since Lucene tie-breaks on the doc id
|
||||||
|
return query.getClass() == ConstantScoreQuery.class
|
||||||
|
|| query.getClass() == MatchAllDocsQuery.class;
|
||||||
|
} else {
|
||||||
|
return Sort.INDEXORDER.equals(sort);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* In a package-private method so that it can be tested without having to
|
* In a package-private method so that it can be tested without having to
|
||||||
* wire everything (mapperService, etc.)
|
* wire everything (mapperService, etc.)
|
||||||
|
@ -165,7 +177,7 @@ public class QueryPhase implements SearchPhase {
|
||||||
numDocs = Math.min(searchContext.size(), totalNumDocs);
|
numDocs = Math.min(searchContext.size(), totalNumDocs);
|
||||||
lastEmittedDoc = scrollContext.lastEmittedDoc;
|
lastEmittedDoc = scrollContext.lastEmittedDoc;
|
||||||
|
|
||||||
if (Sort.INDEXORDER.equals(searchContext.sort())) {
|
if (returnsDocsInOrder(query, searchContext.sort())) {
|
||||||
if (scrollContext.totalHits == -1) {
|
if (scrollContext.totalHits == -1) {
|
||||||
// first round
|
// first round
|
||||||
assert scrollContext.lastEmittedDoc == null;
|
assert scrollContext.lastEmittedDoc == null;
|
||||||
|
|
Loading…
Reference in New Issue