]> git.openstreetmap.org Git - nominatim.git/commitdiff
add testing for rank adaption while linking
authorSarah Hoffmann <lonvia@denofr.de>
Fri, 21 Feb 2020 15:35:59 +0000 (16:35 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Fri, 28 Feb 2020 14:22:48 +0000 (15:22 +0100)
lib/Geocode.php
lib/SearchDescription.php
sql/functions/placex_triggers.sql
test/bdd/db/import/linking.feature
test/bdd/steps/queries.py

index f45b2caae3349fa256a114dd61a501e0c2778bba..ab9446e0ebd757837d819a706f250b5a3c1ac408 100644 (file)
@@ -808,9 +808,7 @@ class Geocode
                         $sSQL .= 'WHERE place_id in ('.$sPlaceIds.') ';
                         $sSQL .= '  AND (';
                         $sSQL .= "         placex.rank_address between $this->iMinAddressRank and $this->iMaxAddressRank ";
-                        if (14 >= $this->iMinAddressRank && 14 <= $this->iMaxAddressRank) {
-                            $sSQL .= "     OR (extratags->'place') = 'city'";
-                        }
+                        $sSQL .= "         OR placex.rank_search between $this->iMinAddressRank and $this->iMaxAddressRank ";
                         if ($this->aAddressRankList) {
                             $sSQL .= '     OR placex.rank_address in ('.join(',', $this->aAddressRankList).')';
                         }
index 4fafbec2b21c9899fb1e35c51ac8241647876b58..bb478b29b88af4fbcef3a174d8e5405cedd616ea 100644 (file)
@@ -660,10 +660,7 @@ class SearchDescription
             $aTerms[] = 'address_rank between 16 and 27';
         } elseif (!$this->sClass || $this->iOperator == Operator::NAME) {
             if ($iMinAddressRank > 0) {
-                $aTerms[] = 'address_rank >= '.$iMinAddressRank;
-            }
-            if ($iMaxAddressRank < 30) {
-                $aTerms[] = 'address_rank <= '.$iMaxAddressRank;
+                $aTerms[] = "((address_rank between $iMinAddressRank and $iMaxAddressRank) or (search_rank between $iMinAddressRank and $iMaxAddressRank))";
             }
         }
 
index 9743eeade7781a9aa312f542bf750452db0bc799..e16b778371151ef8c26aa274e6bb35d1ef616b21 100644 (file)
@@ -841,8 +841,10 @@ BEGIN
     NEW.centroid := coalesce(location.centroid,
                              ST_Centroid(location.geometry));
 
-    -- Use the address rank of the linked place
-    NEW.rank_address := location.rank_address;
+    -- Use the address rank of the linked place, if it has one
+    IF location.rank_address between 5 and 25 THEN
+      NEW.rank_address := location.rank_address;
+    END IF;
 
     -- merge in the label name
     IF NOT location.name IS NULL THEN
index 646f89da179beee066969aab6c4b81c0eaef2fe1..1bca7dfc7d0dcf60d09a8a39aba6affbfbad5dde 100644 (file)
@@ -146,7 +146,7 @@ Feature: Linking of places
     Scenario: Boundaries with place tags are linked against places with same type
         Given the places
          | osm  | class    | type           | admin | name   | extra+place | geometry |
-         | R13  | boundary | administrative | 5     | Berlin | city        |poly-area:0.1 |
+         | R13  | boundary | administrative | 4     | Berlin | city        |poly-area:0.1 |
         And the places
          | osm  | class    | type           | name   | geometry |
          | N2   | place    | city           | Berlin | 0.006 0.00001 |
@@ -157,11 +157,24 @@ Feature: Linking of places
         And placex contains
          | object | rank_address |
          | R13    | 16 |
+        When searching for ""
+         | city |
+         | Berlin |
+        Then results contain
+          | ID | osm_type | osm_id |
+          |  0 | R | 13 |
+        When searching for ""
+         | state |
+         | Berlin |
+        Then results contain
+          | ID | osm_type | osm_id |
+          |  0 | R | 13 |
+
 
     Scenario: Boundaries without place tags only link against same admin level
         Given the places
          | osm  | class    | type           | admin | name   | geometry |
-         | R13  | boundary | administrative | 5     | Berlin |poly-area:0.1 |
+         | R13  | boundary | administrative | 4     | Berlin |poly-area:0.1 |
         And the places
          | osm  | class    | type           | name   | geometry |
          | N2   | place    | city           | Berlin | 0.006 0.00001 |
@@ -171,5 +184,17 @@ Feature: Linking of places
          | N2      | -               |
         And placex contains
          | object | rank_address |
-         | R13    | 10 |
+         | R13    | 8 |
+        When searching for ""
+         | state |
+         | Berlin |
+        Then results contain
+          | ID | osm_type | osm_id |
+          |  0 | R | 13 |
+        When searching for ""
+         | city |
+         | Berlin |
+        Then results contain
+          | ID | osm_type | osm_id |
+          |  0 | N | 2 |
 
index 3f0cffffb74cee1bc66414745a712bc8d36c1665..4e6ec1ff5ab02c6d3556cd17877ca48376c370d6 100644 (file)
@@ -297,7 +297,8 @@ def query_cmd(context, query, dups):
     """
     cmd = ['/usr/bin/env', 'php']
     cmd.append(os.path.join(context.nominatim.build_dir, 'utils', 'query.php'))
-    cmd.extend(['--search', query])
+    if query:
+        cmd.extend(['--search', query])
     # add more parameters in table form
     if context.table:
         for h in context.table.headings: