From: Sarah Hoffmann Date: Thu, 17 Sep 2020 15:11:22 +0000 (+0200) Subject: make sure that all postcodes have an entry in word X-Git-Tag: v3.5.2~3 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/61fe274c6e8e296ac1c8ea48650b59b5c07d36d2 make sure that all postcodes have an entry in word 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. --- diff --git a/sql/functions/normalization.sql b/sql/functions/normalization.sql index 66d0214a..504990a7 100644 --- a/sql/functions/normalization.sql +++ b/sql/functions/normalization.sql @@ -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'); diff --git a/test/bdd/db/import/postcodes.feature b/test/bdd/db/import/postcodes.feature index 863a9b3a..3d1dc489 100644 --- a/test/bdd/db/import/postcodes.feature +++ b/test/bdd/db/import/postcodes.feature @@ -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 |