fix: tsquery only returns results if all keywords match #268
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.
The current implementation for creating ts queries uses plainto_tsquery(). This produces the following TSV query:
Because of that, these queries will only return any results if ALL keywords match. This can lead to counterintuitive cases where queries might return perfect results but none if some random filler word is added.
This tiny PR changes the query creation to the following approach:
Which fixes the counterintuitive results. Unfortunately postgres does not support creating OR queries out of the box, which is why the query needs to be rewritten using regexp_replace. websearch_to_tsquery is used as it supports some operators (including OR for our case) and is recommended for raw user-supplied input https://www.postgresql.org/docs/current/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES
PR could be extended to make the search behavior configurable via HybridSearchConfig