]> 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, 24 Sep 2020 09:53:23 +0000 (11:53 +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 66d0214add4f7c1fe9a169bc2231120c94de22d1..504990a7f53f471a57aceb6a4c0c2fd8eb6833e1 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      |