$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 ';
$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';
--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}};
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) """)
# 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)
"" : [20, 0]
},
"highway" : {
- "" : 26,
+ "" : 30,
"service" : 27,
"cycleway" : 27,
"path" : 27,
"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]
| 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