ES|QL - Improve prefiltering in KNN function #138286
Draft
+121
−68
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.
KNN function performs prefiltering, so for a query like:
the KNN function will receive text: "value" as a prefilter:
However, text: "value" remains as part of the conjunction, so in the end it will be transformed into a boolean query for the KNN and MATCH function. And the problem is, that the MATCH function will be scored, so it will impact both performance and overall scoring.
Including a prefilter for KNN is equivalent to the conjunction itself, so we can safely remove the other side of the conjunction when there is a KNN function on the other side that includes it as prefilter.
This PR transforms the above expression into:
so there is no need to generate a separate query for the MATCH function, and it is not combined for scoring purposes.