X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/021f2bef4c08132833550a2191978ee77aaddad3..d586b95ff11a45ab6223e83e1b0540f1db87b325:/sql/partition-functions.src.sql?ds=sidebyside diff --git a/sql/partition-functions.src.sql b/sql/partition-functions.src.sql index 63548ab2..703c08af 100644 --- a/sql/partition-functions.src.sql +++ b/sql/partition-functions.src.sql @@ -47,6 +47,9 @@ BEGIN WHERE geometry && feature AND is_relevant_geometry(ST_Relate(geometry, feature), ST_GeometryType(feature)) AND rank_address < maxrank + -- Postcodes currently still use rank_search to define for which + -- features they are relevant. + AND not (rank_address in (5, 11) and rank_search > maxrank) GROUP BY place_id, keywords, rank_address, rank_search, isguess, postcode, centroid LOOP RETURN NEXT r; @@ -87,7 +90,7 @@ BEGIN AND rank_address between item.from_rank and item.to_rank AND word_ids_from_name(item.name) && keywords GROUP BY place_id, keywords, rank_address, rank_search, isguess, postcode, centroid - ORDER BY ST_Intersects(ST_Collect(geometry), feature), distance LIMIT 1; + ORDER BY bool_or(ST_Intersects(geometry, feature)), distance LIMIT 1; IF r.place_id is null THEN -- If we cannot find a place for the term, just return the -- search term for the given name. That ensures that the address @@ -176,7 +179,7 @@ BEGIN INTO parent WHERE name_vector && isin_token AND centroid && ST_Expand(point, 0.015) - AND search_rank between 26 and 27 + AND address_rank between 26 and 27 ORDER BY ST_Distance(centroid, point) ASC limit 1; RETURN parent; END IF; @@ -224,8 +227,8 @@ BEGIN IF in_partition = -partition- THEN DELETE FROM search_name_-partition- values WHERE place_id = in_place_id; IF in_rank_address > 0 THEN - INSERT INTO search_name_-partition- (place_id, search_rank, address_rank, name_vector, centroid) - values (in_place_id, in_rank_search, in_rank_address, in_name_vector, in_geometry); + INSERT INTO search_name_-partition- (place_id, address_rank, name_vector, centroid) + values (in_place_id, in_rank_address, in_name_vector, in_geometry); END IF; RETURN TRUE; END IF;