]> git.openstreetmap.org Git - nominatim.git/commitdiff
make sure that all postcodes have an entry in word
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 17 Sep 2020 15:11:22 +0000 (17:11 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 17 Sep 2020 15:11:22 +0000 (17:11 +0200)
It may happen that two different postcodes normalize to exactly
the same token. In that case we still need two different entries
in the word table. Token lookup will then make sure that the correct
one is choosen.

Fixes #1953.

sql/functions/normalization.sql
test/bdd/db/import/postcodes.feature

index 1a8bbd84412d8fdb09d3f8291c6b13983afde61e..08087172c578f72186620b1b1fe859773bec2617 100644 (file)
@@ -81,7 +81,8 @@ BEGIN
   lookup_word := upper(trim(postcode));
   lookup_token := ' ' || make_standard_name(lookup_word);
   SELECT min(word_id) FROM word
-    WHERE word_token = lookup_token and class='place' and type='postcode'
+    WHERE word_token = lookup_token and word = lookup_word
+          and class='place' and type='postcode'
     INTO return_word_id;
   IF return_word_id IS NULL THEN
     return_word_id := nextval('seq_word');
index 863a9b3abcb87fe525363fa2c9f56e964033e1a2..3d1dc489482fb90cc65b730175398804473aff05 100644 (file)
@@ -137,3 +137,22 @@ Feature: Import of postcodes
         And word contains
            | word  | class | type |
            | 01982 | place | postcode |
+
+    Scenario: Different postcodes with the same normalization can both be found
+        Given the places
+           | osm | class | type  | addr+postcode | addr+housenumber | geometry |
+           | N34 | place | house | EH4 7EA       | 111              | country:gb |
+           | N35 | place | house | E4 7EA        | 111              | country:gb |
+        When importing
+        Then location_postcode contains exactly
+           | country | postcode | geometry |
+           | gb      | EH4 7EA  | country:gb |
+           | gb      | E4 7EA   | country:gb |
+        When searching for "EH4 7EA"
+        Then results contain
+           | type     | placename |
+           | postcode | EH4 7EA      |
+        When searching for "E4 7EA"
+        Then results contain
+           | type     | placename |
+           | postcode | E4 7EA      |