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.
This commit is contained in:
Sarah Hoffmann 2020-09-17 17:11:22 +02:00
parent 0ac99bc2a9
commit 61fe274c6e
2 changed files with 21 additions and 1 deletions

View 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');

View 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 |