From: Sarah Hoffmann Date: Sun, 20 Nov 2022 21:11:56 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Tag: deploy~87 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/f4c792e8142655f982cdd99f900e89d3896e2a16?hp=d50d44bddd215796ea8ed223ba781033fd71d5fe Merge remote-tracking branch 'upstream/master' --- diff --git a/lib-php/ReverseGeocode.php b/lib-php/ReverseGeocode.php index 2aea9038..d12e4da3 100644 --- a/lib-php/ReverseGeocode.php +++ b/lib-php/ReverseGeocode.php @@ -189,14 +189,16 @@ class ReverseGeocode $sSQL .= '(select place_id, parent_place_id, rank_address, rank_search, country_code, geometry'; $sSQL .= ' FROM placex'; $sSQL .= ' WHERE ST_GeometryType(geometry) in (\'ST_Polygon\', \'ST_MultiPolygon\')'; - $sSQL .= ' AND rank_address Between 5 AND ' .$iMaxRank; + // Ensure that query planner doesn't use the index on rank_search. + $sSQL .= ' AND coalesce(rank_search, 0) between 5 and ' .$iMaxRank; + $sSQL .= ' AND rank_address between 4 and 25'; // needed for index selection $sSQL .= ' AND geometry && '.$sPointSQL; $sSQL .= ' AND type != \'postcode\' '; $sSQL .= ' AND name is not null'; $sSQL .= ' AND indexed_status = 0 and linked_place_id is null'; - $sSQL .= ' ORDER BY rank_address DESC LIMIT 50 ) as a'; - $sSQL .= ' WHERE ST_CONTAINS(geometry, '.$sPointSQL.' )'; - $sSQL .= ' ORDER BY rank_address DESC LIMIT 1'; + $sSQL .= ' ORDER BY rank_search DESC LIMIT 50 ) as a'; + $sSQL .= ' WHERE ST_Contains(geometry, '.$sPointSQL.' )'; + $sSQL .= ' ORDER BY rank_search DESC LIMIT 1'; Debug::printSQL($sSQL); $aPoly = $this->oDB->getRow($sSQL, null, 'Could not determine polygon containing the point.'); @@ -208,7 +210,7 @@ class ReverseGeocode $iRankSearch = $aPoly['rank_search']; $iPlaceID = $aPoly['place_id']; - if ($iRankAddress != $iMaxRank) { + if ($iRankSearch != $iMaxRank) { $sSQL = 'SELECT place_id FROM '; $sSQL .= '(SELECT place_id, rank_search, country_code, geometry,'; $sSQL .= ' ST_distance('.$sPointSQL.', geometry) as distance'; diff --git a/lib-sql/indices.sql b/lib-sql/indices.sql index 54e88fd8..9130fb52 100644 --- a/lib-sql/indices.sql +++ b/lib-sql/indices.sql @@ -56,6 +56,15 @@ CREATE INDEX IF NOT EXISTS idx_postcode_postcode --- CREATE UNIQUE INDEX IF NOT EXISTS idx_place_osm_unique ON place USING btree(osm_id, osm_type, class, type) {{db.tablespace.address_index}}; +--- +-- Table needed for running updates with osm2pgsql on place. + CREATE TABLE IF NOT EXISTS place_to_be_deleted ( + osm_type CHAR(1), + osm_id BIGINT, + class TEXT, + type TEXT, + deferred BOOLEAN + ); {% endif %} -- Indices only needed for search. @@ -82,14 +91,5 @@ CREATE INDEX IF NOT EXISTS idx_postcode_postcode INCLUDE (startnumber, endnumber) {{db.tablespace.search_index}} WHERE startnumber is not null; {% endif %} ---- --- Table needed for running updates with osm2pgsql on place. - CREATE TABLE IF NOT EXISTS place_to_be_deleted ( - osm_type CHAR(1), - osm_id BIGINT, - class TEXT, - type TEXT, - deferred BOOLEAN - ); {% endif %}