Speed up conjunctive queries that need scores. #14690
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Calls to
DocIdSetIterator#nextDoc
,DocIdSetIterator#advance
andSimScorer#score
are currently interleaved and include lots of conditionals.This builds up on #14679 and refactors the code a bit to make it eligible to
auto-vectorization and better pipelining.
This effectively speeds up conjunctive queries (e.g.
AndHighHigh
) but alsodisjunctive queries that run as conjunctive queries in practice (e.g.
OrHighHigh
).Note that this builds on #14679, only the last commit touches conjunctive queries. I will clean up this PR when #14679 is merged but wanted to show the benefits for conjunctive queries as well. Note that unlike #14679 this change helps when dynamic pruning kicks in.
In the below luceneutil run on wikibigall, the baseline is ##14679 and the modified version is this PR: