DECLARE
location RECORD;
result prepare_update_info;
+ extra_names HSTORE;
BEGIN
-- For POI nodes, check if the address should be derived from a surrounding
-- building.
END LOOP;
END IF;
+ -- remove internal and derived names
result.address := result.address - '_unlisted_place'::TEXT;
- result.name := p.name;
+ SELECT hstore(array_agg(key), array_agg(value)) INTO result.name
+ FROM each(p.name) WHERE key not like '\_%';
+
result.class := p.class;
result.type := p.type;
result.country_code := p.country_code;
IF location.place_id is not NULL THEN
result.linked_place_id := location.place_id;
- IF NOT location.name IS NULL THEN
- result.name := location.name || result.name;
+ IF location.name is not NULL THEN
+ {% if debug %}RAISE WARNING 'Names original: %, location: %', result.name, location.name;{% endif %}
+ -- Add all names from the place nodes that deviate from the name
+ -- in the relation with the prefix '_place_'. Deviation means that
+ -- either the value is different or a given key is missing completely
+ SELECT hstore(array_agg('_place_' || key), array_agg(value)) INTO extra_names
+ FROM each(location.name - result.name);
+ {% if debug %}RAISE WARNING 'Extra names: %', extra_names;{% endif %}
+
+ result.name := location.name || result.name || extra_names;
+ {% if debug %}RAISE WARNING 'Final names: %', result.name;{% endif %}
END IF;
END IF;
Then results contain
| osm |
| R13 |
+
+
+ Scenario: Differing names from linked places are searchable
+ Given the places
+ | osm | class | type | admin | name | geometry |
+ | R13 | boundary | administrative | 6 | Garbo | poly-area:0.1 |
+ Given the places
+ | osm | class | type | admin | name | geometry |
+ | N2 | place | hamlet | 15 | Vario | 0.006 0.00001 |
+ And the relations
+ | id | members | tags+type |
+ | 13 | N2:label | boundary |
+ When importing
+ Then placex contains
+ | object | linked_place_id |
+ | N2 | R13 |
+ When sending search query "Vario"
+ Then results contain
+ | osm |
+ | R13 |
def import_and_index_data_from_place_table(context):
""" Import data previously set up in the place table.
"""
+ context.nominatim.run_nominatim('refresh', '--functions')
context.nominatim.run_nominatim('import', '--continue', 'load-data',
'--index-noanalyse', '-q')