Reorganize SQL for place search using window functions #3383
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.
When searching for a place, Nominatim needs to look up the names in the search_name table and at the same time some further properties that restrict search in the placex table. Since looking up full and partial names at the same time, the initial result set has become a lot larger, thus creating a lot more IO accesses.
This PR rearranges the query: Nominatim does first the lookup in the search_name table, already computing the penalty for how well a word matches and the uses SQL windowing to throw away most of the results that have a lower importance/matching factor than the best result. The placex table is joined only after that, so that significantly less rows need to be retrieved from there.
Also increases radius when restricting search by postcode.