From: Sarah Hoffmann Date: Thu, 25 Nov 2021 07:41:57 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Tag: deploy~136 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/5302b5d411380251a91006853e28f506f63a83fa?hp=d72f11d1afd5ae91071ba4a7440ed953d2495e16 Merge remote-tracking branch 'upstream/master' --- diff --git a/lib-php/SearchDescription.php b/lib-php/SearchDescription.php index 4962d9ff..be5623af 100644 --- a/lib-php/SearchDescription.php +++ b/lib-php/SearchDescription.php @@ -591,8 +591,7 @@ class SearchDescription $sChildHnr .= ' AND housenumber ~* E'.$sHouseNumberRegex; // Interpolations on streets and places. if (preg_match('/^[0-9]+$/', $this->sHouseNumber)) { - $sIpolHnr = 'SELECT * FROM location_property_osmline '; - $sIpolHnr .= 'WHERE parent_place_id = search_name.place_id '; + $sIpolHnr = 'WHERE parent_place_id = search_name.place_id '; $sIpolHnr .= ' AND startnumber is not NULL'; $sIpolHnr .= ' AND '.$this->sHouseNumber.'>=startnumber '; $sIpolHnr .= ' AND '.$this->sHouseNumber.'<=endnumber '; @@ -606,7 +605,11 @@ class SearchDescription $sSql = '(CASE WHEN address_rank = 30 THEN EXISTS('.$sSelfHnr.') '; $sSql .= ' ELSE EXISTS('.$sChildHnr.') '; if ($sIpolHnr) { - $sSql .= 'OR EXISTS('.$sIpolHnr.') '; + $sSql .= 'OR EXISTS(SELECT * FROM location_property_osmline '.$sIpolHnr.') '; + if (CONST_Use_US_Tiger_Data) { + $sSql .= "OR (country_code = 'us' AND "; + $sSql .= ' EXISTS(SELECT * FROM location_property_tiger '.$sIpolHnr.')) '; + } } $sSql .= 'END) DESC'; diff --git a/lib-sql/tiger_import_finish.sql b/lib-sql/tiger_import_finish.sql index 1a9dc2dd..fb76477c 100644 --- a/lib-sql/tiger_import_finish.sql +++ b/lib-sql/tiger_import_finish.sql @@ -1,6 +1,10 @@ --index only on parent_place_id CREATE INDEX IF NOT EXISTS idx_location_property_tiger_parent_place_id_imp - ON location_property_tiger_import (parent_place_id) {{db.tablespace.aux_index}}; + ON location_property_tiger_import (parent_place_id) +{% if postgres.has_index_non_key_column %} + INCLUDE (startnumber, endnumber) +{% endif %} + {{db.tablespace.aux_index}}; CREATE UNIQUE INDEX IF NOT EXISTS idx_location_property_tiger_place_id_imp ON location_property_tiger_import (place_id) {{db.tablespace.aux_index}}; diff --git a/nominatim/tools/migration.py b/nominatim/tools/migration.py index d7faca31..87febacc 100644 --- a/nominatim/tools/migration.py +++ b/nominatim/tools/migration.py @@ -192,3 +192,20 @@ def install_legacy_tokenizer(conn, config, **_): module_name='legacy') tokenizer.migrate_database(config) + + +@_migration(4, 0, 99, 0) +def create_tiger_housenumber_index(conn, _, **_): + """ Create idx_location_property_tiger_parent_place_id with included + house number. + + The inclusion is needed for efficient lookup of housenumbers in + full address searches. + """ + if conn.server_version_tuple() >= (11, 0, 0): + with conn.cursor() as cur: + cur.execute(""" CREATE INDEX IF NOT EXISTS + idx_location_property_tiger_housenumber_migrated + ON location_property_tiger + USING btree(parent_place_id) + INCLUDE (startnumber, endnumber) """) diff --git a/nominatim/version.py b/nominatim/version.py index dcfc161e..06a3e971 100644 --- a/nominatim/version.py +++ b/nominatim/version.py @@ -9,8 +9,16 @@ Version information for Nominatim. # The database patch level tracks important changes between releases # and must always be increased when there is a change to the database or code # that requires a migration. +# +# When adding a migration on the development branch, raise the patch level +# to 99 to make sure that the migration is applied when updating from a +# patch release to the next minor version. Patch releases usually shouldn't +# have migrations in them. When they are needed, then make sure that the +# migration can reapplied and set the migration version to the appropriate +# patch level when cherry-picking the commit with the migration. +# # Released versions always have a database patch level of 0. -NOMINATIM_VERSION = (4, 0, 0, 0) +NOMINATIM_VERSION = (4, 0, 99, 1) POSTGRESQL_REQUIRED_VERSION = (9, 5) POSTGIS_REQUIRED_VERSION = (2, 2) diff --git a/settings/address-levels.json b/settings/address-levels.json index fc31a654..67bca991 100644 --- a/settings/address-levels.json +++ b/settings/address-levels.json @@ -82,7 +82,7 @@ "" : [20, 0] }, "highway" : { - "" : 26, + "" : 30, "service" : 27, "cycleway" : 27, "path" : 27, @@ -93,7 +93,19 @@ "primary_link" : 27, "trunk_link" : 27, "secondary_link" : 27, - "tertiary_link" : 27 + "tertiary_link" : 27, + "residential" : 26, + "track" : 26, + "unclassified" : 26, + "tertiary" : 26, + "secondary" : 26, + "primary" : 26, + "living_street" : 26, + "trunk" : 26, + "motorway" : 26, + "pedestrian" : 26, + "road" : 26, + "construction" : 26 }, "mountain_pass" : { "" : [20, 0] diff --git a/test/bdd/db/import/placex.feature b/test/bdd/db/import/placex.feature index db36ab58..9b208775 100644 --- a/test/bdd/db/import/placex.feature +++ b/test/bdd/db/import/placex.feature @@ -176,7 +176,7 @@ Feature: Import into placex | W3 | 26 | 26 | | W4 | 26 | 26 | | W5 | 26 | 26 | - | W6 | 26 | 26 | + | W6 | 30 | 30 | Scenario: rank and inclusion of landuses Given the named places