]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge pull request #2427 from lonvia/remove-us-states-special-casing
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 17 Aug 2021 19:55:32 +0000 (21:55 +0200)
committerGitHub <noreply@github.com>
Tue, 17 Aug 2021 19:55:32 +0000 (21:55 +0200)
Move US state hack into legacy tokenizer

lib-php/Geocode.php
lib-php/Phrase.php
lib-php/tokenizer/legacy_tokenizer.php
test/bdd/db/query/search_simple.feature

index 0f76a9c472749652823f8f4b8a8f0f306f8b2edb..43d10368eb9292ffcd90d2fcc8103b4a07ded395 100644 (file)
@@ -506,13 +506,6 @@ class Geocode
             userError('Query string is not UTF-8 encoded.');
         }
 
-        // Conflicts between US state abreviations and various words for 'the' in different languages
-        if (isset($this->aLangPrefOrder['name:en'])) {
-            $sQuery = preg_replace('/(^|,)\s*il\s*(,|$)/i', '\1illinois\2', $sQuery);
-            $sQuery = preg_replace('/(^|,)\s*al\s*(,|$)/i', '\1alabama\2', $sQuery);
-            $sQuery = preg_replace('/(^|,)\s*la\s*(,|$)/i', '\1louisiana\2', $sQuery);
-        }
-
         // Do we have anything that looks like a lat/lon pair?
         $sQuery = $oCtx->setNearPointFromQuery($sQuery);
 
index cdde6134768dd7e0af7501f9c5fb517ef0372931..4307a23022c640760fb08f92acddb3d01e8d70a0 100644 (file)
@@ -9,7 +9,8 @@ namespace Nominatim;
  */
 class Phrase
 {
-    // Complete phrase as a string.
+    // Complete phrase as a string (guaranteed to have no leading or trailing
+    // spaces).
     private $sPhrase;
     // Element type for structured searches.
     private $sPhraseType;
index e5ffbe025f05aabb268b886bc6c055174eb831e5..b508d220aca3f07e861fd0bbb6efc39a13cf5528 100644 (file)
@@ -87,6 +87,23 @@ class Tokenizer
             $sNormQuery .= ','.$this->normalizeString($oPhrase->getPhrase());
             $sSQL .= 'make_standard_name(:' .$iPhrase.') as p'.$iPhrase.',';
             $aParams[':'.$iPhrase] = $oPhrase->getPhrase();
+
+            // Conflicts between US state abbreviations and various words
+            // for 'the' in different languages
+            switch (strtolower($oPhrase->getPhrase())) {
+                case 'il':
+                    $aParams[':'.$iPhrase] = 'illinois';
+                    break;
+                case 'al':
+                    $aParams[':'.$iPhrase] = 'alabama';
+                    break;
+                case 'la':
+                    $aParams[':'.$iPhrase] = 'louisiana';
+                    break;
+                default:
+                    $aParams[':'.$iPhrase] = $oPhrase->getPhrase();
+                    break;
+            }
         }
         $sSQL = substr($sSQL, 0, -1);
 
index 8c19fb7d3370bbab9dbf99d3482f4bdda1436aa3..bcd73eaf8cc0767ef2fd71f40ff9b4f3d7247fb7 100644 (file)
@@ -61,7 +61,7 @@ Feature: Searching of simple objects
          | osm |
          | N20 |
 
-     Scenario: when the housenumber is missing the stret is still returned
+     Scenario: when the housenumber is missing the street is still returned
         Given the grid
          | 1 |  | 2 |
         Given the places
@@ -72,3 +72,34 @@ Feature: Searching of simple objects
         Then results contain
          | osm |
          | W1  |
+
+
+     Scenario Outline: Special cased american states will be found
+        Given the grid
+         | 1 |    | 2 |
+         |   | 10 |   |
+         | 4 |    | 3 |
+        Given the places
+         | osm  | class    | type           | admin | name    | name+ref | geometry    |
+         | R1   | boundary | administrative | 4     | <state> | <ref>    | (1,2,3,4,1) |
+        Given the places
+         | osm  | class | type  | name   | geometry    |
+         | N2   | place | town  | <city> | 10          |
+         | N3   | place | city  | <city>  | country:ca  |
+        When importing
+        And sending search query "<city>, <state>"
+        Then results contain
+         | osm |
+         | N2  |
+        When sending search query "<city>, <ref>"
+         | accept-language |
+         | en |
+        Then results contain
+         | osm |
+         | N2  |
+
+     Examples:
+        | city        | state     | ref |
+        | Chicago     | Illinois  | IL  |
+        | Auburn      | Alabama   | AL  |
+        | New Orleans | Louisiana | LA  |