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:
Sarah Hoffmann 2022-03-16 16:38:52 +01:00
parent 433d2f4c7d
commit 42cd021d04
3 changed files with 37 additions and 3 deletions

View File

@ -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;

View File

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

View File

@ -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')