Use fast path for 0 or 1-segment searches #113969
Open
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.
Partly motivated by the desire to have a clearly identifiable code path for non-concurrent search execution in profiling, but does save a couple of cycles and an equivalent fix in Lucene (I'll open a PR as well) yields a measurable speedup.
We can short-circuit both the 0 and and 1-segment use cases. For zero segments, we can skip rewrite and weight creation, for a single segment we can fully bypass the
TaskExecutor
overhead and save a couple of memory barriers.Also, we can save building the intermediary
Collector
list and simply create the tasks right away.