]> git.openstreetmap.org Git - nominatim.git/commitdiff
move ordering out of getNearFeatures
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 13 Oct 2020 12:57:11 +0000 (14:57 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Tue, 13 Oct 2020 13:24:54 +0000 (15:24 +0200)
The two places where the function is called have different ordering
requirement.

sql/functions/placex_triggers.sql
sql/functions/postcode_triggers.sql
sql/partition-functions.src.sql

index 1f664a4a5531924a68e16709b8de4f33373af5c9..9a5c67767245edcd84a8c0a4398db54729c76317 100644 (file)
@@ -307,7 +307,13 @@ BEGIN
   END LOOP;
 
   FOR location IN
-    SELECT * FROM getNearFeatures(partition, geometry, maxrank, isin_tokens)
+    SELECT * FROM getNearFeatures(partition, geometry, maxrank)
+    ORDER BY rank_address, isin_tokens && keywords desc, isguess asc,
+             distance *
+               CASE WHEN rank_address = 16 AND rank_search = 15 THEN 0.2
+                    WHEN rank_address = 16 AND rank_search = 16 THEN 0.25
+                    WHEN rank_address = 16 AND rank_search = 18 THEN 0.5
+                    ELSE 1 END ASC
   LOOP
     IF location.rank_address != current_rank_address THEN
       current_rank_address := location.rank_address;
index 96788d65ab2d6a9157d2ed377969bb9589402a40..515b76664ad4cf6de31f52c7fed1f121485e849f 100644 (file)
@@ -27,8 +27,8 @@ BEGIN
     NEW.parent_place_id = 0;
     FOR location IN
       SELECT place_id
-        FROM getNearFeatures(partition, NEW.geometry, NEW.rank_search, '{}'::int[])
-        WHERE NOT isguess ORDER BY rank_address DESC LIMIT 1
+        FROM getNearFeatures(partition, NEW.geometry, NEW.rank_search)
+        WHERE NOT isguess ORDER BY rank_address DESC, distance asc LIMIT 1
     LOOP
         NEW.parent_place_id = location.place_id;
     END LOOP;
index e2342a9c1aa5e67035f3bb822b718771fb346b6e..97520f99b8441d5fec6f61248afa3572a4d3cb00 100644 (file)
@@ -32,7 +32,7 @@ BEGIN
 END
 $$ LANGUAGE plpgsql IMMUTABLE;
 
-create or replace function getNearFeatures(in_partition INTEGER, feature GEOMETRY, maxrank INTEGER, isin_tokens INT[]) RETURNS setof nearfeaturecentr AS $$
+create or replace function getNearFeatures(in_partition INTEGER, feature GEOMETRY, maxrank INTEGER) RETURNS setof nearfeaturecentr AS $$
 DECLARE
   r nearfeaturecentr%rowtype;
 BEGIN
@@ -46,13 +46,6 @@ BEGIN
         AND is_relevant_geometry(ST_Relate(geometry, feature), ST_GeometryType(feature))
         AND rank_address < maxrank
       GROUP BY place_id, keywords, rank_address, rank_search, isguess, postcode, centroid
-      ORDER BY rank_address, isin_tokens && keywords desc, isguess asc,
-        ST_Distance(feature, centroid) *
-          CASE 
-               WHEN rank_address = 16 AND rank_search = 15 THEN 0.2 -- capital city
-               WHEN rank_address = 16 AND rank_search = 16 THEN 0.25 -- city
-               WHEN rank_address = 16 AND rank_search = 17 THEN 0.5 -- town
-               ELSE 1 END ASC -- everything else
     LOOP
       RETURN NEXT r;
     END LOOP;