osm-search / Nominatim

Open Source search based on OpenStreetMap data
https://nominatim.org
GNU General Public License v3.0
2.98k stars 701 forks source link

Reorganize SQL for place search using window functions #3383

Closed lonvia closed 3 months ago

lonvia commented 3 months ago

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.