forked from hans/Nominatim
Merge pull request #2058 from lonvia/split-address-words
Split addr:* tags into words before adding to the search index
This commit is contained in:
@@ -207,19 +207,31 @@ CREATE OR REPLACE FUNCTION addr_ids_from_name(lookup_word TEXT)
|
|||||||
RETURNS INTEGER[]
|
RETURNS INTEGER[]
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
lookup_token TEXT;
|
words TEXT[];
|
||||||
id INTEGER;
|
id INTEGER;
|
||||||
return_word_id INTEGER[];
|
return_word_id INTEGER[];
|
||||||
|
word_ids INTEGER[];
|
||||||
|
j INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
lookup_token := make_standard_name(lookup_word);
|
words := string_to_array(make_standard_name(lookup_word), ' ');
|
||||||
SELECT array_agg(word_id) FROM word
|
IF array_upper(words, 1) IS NOT NULL THEN
|
||||||
WHERE word_token = lookup_token and class is null and type is null
|
FOR j IN 1..array_upper(words, 1) LOOP
|
||||||
INTO return_word_id;
|
IF (words[j] != '') THEN
|
||||||
IF return_word_id IS NULL THEN
|
SELECT array_agg(word_id) INTO word_ids
|
||||||
id := nextval('seq_word');
|
FROM word
|
||||||
INSERT INTO word VALUES (id, lookup_token, null, null, null, null, 0);
|
WHERE word_token = words[j] and class is null and type is null;
|
||||||
return_word_id = ARRAY[id];
|
|
||||||
|
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;
|
END IF;
|
||||||
|
|
||||||
RETURN return_word_id;
|
RETURN return_word_id;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
|
|||||||
@@ -30,7 +30,24 @@ Feature: Creation of search terms
|
|||||||
| osm_type | osm_id | name |
|
| osm_type | osm_id | name |
|
||||||
| N | 1 | 23, Rose Street |
|
| 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
|
Given the scene roads-with-pois
|
||||||
And the places
|
And the places
|
||||||
| osm | class | type | housenr | addr+city | geometry |
|
| osm | class | type | housenr | addr+city | geometry |
|
||||||
@@ -200,7 +217,7 @@ Feature: Creation of search terms
|
|||||||
When importing
|
When importing
|
||||||
Then search_name contains
|
Then search_name contains
|
||||||
| object | nameaddress_vector |
|
| 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
|
Scenario: A known addr:* tag is added even if the name is unknown
|
||||||
Given the scene roads-with-pois
|
Given the scene roads-with-pois
|
||||||
|
|||||||
Reference in New Issue
Block a user