RETURNS INTEGER[]
AS $$
DECLARE
- lookup_token TEXT;
+ words TEXT[];
id INTEGER;
return_word_id INTEGER[];
+ word_ids INTEGER[];
+ j INTEGER;
BEGIN
- lookup_token := make_standard_name(lookup_word);
- SELECT array_agg(word_id) FROM word
- WHERE word_token = lookup_token and class is null and type is null
- INTO return_word_id;
- IF return_word_id IS NULL THEN
- id := nextval('seq_word');
- INSERT INTO word VALUES (id, lookup_token, null, null, null, null, 0);
- return_word_id = ARRAY[id];
+ words := string_to_array(make_standard_name(lookup_word), ' ');
+ IF array_upper(words, 1) IS NOT NULL THEN
+ FOR j IN 1..array_upper(words, 1) LOOP
+ IF (words[j] != '') THEN
+ SELECT array_agg(word_id) INTO word_ids
+ FROM word
+ WHERE word_token = words[j] and class is null and type is null;
+
+ IF word_ids IS NULL THEN
+ id := nextval('seq_word');
+ INSERT INTO word VALUES (id, words[j], null, null, null, null, 0);
+ return_word_id := return_word_id || id;
+ ELSE
+ return_word_id := array_merge(return_word_id, word_ids);
+ END IF;
+ END IF;
+ END LOOP;
END IF;
+
RETURN return_word_id;
END;
$$
addr_place_ids := addr_ids_from_name(address->'place');
IF not addr_place_ids <@ parent_name_vector THEN
-- addr:place tag exists without a corresponding place. Mix in addr:place
- -- in the address and drop the name from the parent. This would only be
- -- the street name of the nearest street.
- nameaddress_vector := array_merge(nameaddress_vector, addr_place_ids);
+ -- in the address.
name_vector := ARRAY[getorcreate_name_id(housenumber)];
+ nameaddress_vector := array_merge(nameaddress_vector, addr_place_ids);
END IF;
- ELSE
- nameaddress_vector := array_merge(nameaddress_vector, parent_name_vector);
END IF;
- -- The address vector always gets merged in.
+ -- Merge the parent name and address.
+ nameaddress_vector := array_merge(nameaddress_vector, parent_name_vector);
nameaddress_vector := array_merge(nameaddress_vector, parent_address_vector);
END;
| osm_type | osm_id | name |
| N | 1 | 23, Rose Street |
- Scenario: Unnamed POI has no search entry when it has known addr: tags
+ Scenario: Searching for unknown addr: tags also works for multiple words
+ Given the scene roads-with-pois
+ And the places
+ | osm | class | type | housenr | addr+city | geometry |
+ | N1 | place | house | 23 | Little Big Town | :p-N1 |
+ And the places
+ | osm | class | type | name+name | geometry |
+ | W1 | highway | residential | Rose Street | :w-north |
+ When importing
+ Then search_name contains
+ | object | name_vector | nameaddress_vector |
+ | N1 | #23 | Rose Street, Little, Big, Town |
+ When searching for "23 Rose Street, Little Big Town"
+ Then results contain
+ | osm_type | osm_id | name |
+ | N | 1 | 23, Rose Street |
+
+ Scenario: Unnamed POI has no search entry when it has known addr: tags
Given the scene roads-with-pois
And the places
| osm | class | type | housenr | addr+city | geometry |
When importing
Then search_name has no entry for N1
- Scenario: Unnamed POIs doesn't inherit parent name when unknown addr:place is present
+ Scenario: Unnamed POIs inherit parent name when unknown addr:place is present
Given the scene roads-with-pois
And the places
| osm | class | type | housenr | addr+place | geometry |
| W1 | highway | residential | Rose Street | :w-north |
| N2 | place | city | Strange Town | :p-N1 |
When importing
+ Then placex contains
+ | object | parent_place_id |
+ | N1 | N2 |
Then search_name contains
| object | name_vector | nameaddress_vector |
- | N1 | #23 | Walltown |
+ | N1 | #23 | Walltown, Strange, Town |
When searching for "23 Rose Street"
Then exactly 1 results are returned
And results contain
| osm_type | osm_id | name |
| W | 1 | Rose Street, Strange Town |
- When searching for "23 Walltown"
+ When searching for "23 Walltown, Strange Town"
Then results contain
| osm_type | osm_id | name |
| N | 1 | 23, Walltown, Strange Town |
When importing
Then search_name contains
| object | nameaddress_vector |
- | W1 | bonn, new york, smalltown |
+ | W1 | bonn, new, york, smalltown |
Scenario: A known addr:* tag is added even if the name is unknown
Given the scene roads-with-pois