X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/14e6dab005c49a77ac49b6503f7807e620ea0ed3..3b960a5bf343f5617326f162c6df3399dce34930:/sql/partitions.src.sql diff --git a/sql/partitions.src.sql b/sql/partitions.src.sql index 9c078980..ab5b1163 100644 --- a/sql/partitions.src.sql +++ b/sql/partitions.src.sql @@ -13,6 +13,17 @@ create type nearfeature as ( isguess boolean ); +drop type nearfeaturecentr cascade; +create type nearfeaturecentr as ( + place_id BIGINT, + keywords int[], + rank_address integer, + rank_search integer, + distance float, + isguess boolean, + centroid GEOMETRY +); + CREATE TABLE location_area_country () INHERITS (location_area_large); CREATE INDEX idx_location_area_country_geometry ON location_area_country USING GIST (geometry) TABLESPACE ssd; @@ -46,21 +57,21 @@ CREATE INDEX idx_location_road_-partition-_place_id ON location_road_-partition- -- end -create or replace function getNearFeatures(in_partition INTEGER, point GEOMETRY, maxrank INTEGER, isin_tokens INT[]) RETURNS setof nearfeature AS $$ +create or replace function getNearFeatures(in_partition INTEGER, point GEOMETRY, maxrank INTEGER, isin_tokens INT[]) RETURNS setof nearfeaturecentr AS $$ DECLARE - r nearfeature%rowtype; + r nearfeaturecentr%rowtype; BEGIN -- start IF in_partition = -partition- THEN FOR r IN - SELECT place_id, keywords, rank_address, rank_search, min(ST_Distance(point, centroid)) as distance, isguess FROM ( + SELECT place_id, keywords, rank_address, rank_search, min(ST_Distance(point, centroid)) as distance, isguess, centroid FROM ( SELECT * FROM location_area_large_-partition- WHERE ST_Contains(geometry, point) and rank_search < maxrank UNION ALL SELECT * FROM location_area_country WHERE ST_Contains(geometry, point) and rank_search < maxrank ) as location_area GROUP BY place_id, keywords, rank_address, rank_search, isguess, centroid - ORDER BY rank_address desc, isin_tokens && keywords desc, isguess asc, + ORDER BY rank_address, isin_tokens && keywords desc, isguess asc, ST_Distance(point, centroid) * CASE WHEN rank_address = 16 AND rank_search = 15 THEN 0.2 -- capital city @@ -167,7 +178,7 @@ BEGIN ST_Distance(centroid, point) as distance, null as isguess FROM search_name_-partition- WHERE name_vector @> ARRAY[isin_token] - AND ST_DWithin(centroid, point, 0.01) + AND ST_DWithin(centroid, point, 0.03) AND search_rank between 22 and 27 ORDER BY distance ASC limit 1 LOOP