mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-24 13:31:37 +03:00
save differing linked polace names in extra fields
This keeps the names tracable and ensures that all names are searchable when they differ. Do not keep names when they are exactly the same to save some space. Linked names are cleaned out before relinking.
This commit is contained in:
parent
433d2f4c7d
commit
42cd021d04
@ -26,6 +26,7 @@ CREATE OR REPLACE FUNCTION placex_indexing_prepare(p placex)
|
||||
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.
|
||||
@ -58,8 +59,11 @@ BEGIN
|
||||
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;
|
||||
@ -72,8 +76,17 @@ BEGIN
|
||||
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;
|
||||
|
||||
|
@ -20,3 +20,23 @@ Feature: Searching linked places
|
||||
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 |
|
||||
|
@ -93,6 +93,7 @@ def add_data_to_planet_ways(context):
|
||||
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')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user