mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-11 21:34:06 +00:00
Merge pull request #2737 from lonvia/reset-linking-ranks
Fix rank inheritance from linked places
This commit is contained in:
@@ -773,12 +773,6 @@ BEGIN
|
|||||||
and (linked_place is null or linked_place_id != linked_place);
|
and (linked_place is null or linked_place_id != linked_place);
|
||||||
-- update not necessary for osmline, cause linked_place_id does not exist
|
-- update not necessary for osmline, cause linked_place_id does not exist
|
||||||
|
|
||||||
IF NEW.linked_place_id is not null THEN
|
|
||||||
NEW.token_info := null;
|
|
||||||
{% if debug %}RAISE WARNING 'place already linked to %', OLD.linked_place_id;{% endif %}
|
|
||||||
RETURN NEW;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- Postcodes are just here to compute the centroids. They are not searchable
|
-- Postcodes are just here to compute the centroids. They are not searchable
|
||||||
-- unless they are a boundary=postal_code.
|
-- unless they are a boundary=postal_code.
|
||||||
-- There was an error in the style so that boundary=postal_code used to be
|
-- There was an error in the style so that boundary=postal_code used to be
|
||||||
@@ -823,6 +817,16 @@ BEGIN
|
|||||||
NEW.class, NEW.type, NEW.admin_level,
|
NEW.class, NEW.type, NEW.admin_level,
|
||||||
(NEW.extratags->'capital') = 'yes',
|
(NEW.extratags->'capital') = 'yes',
|
||||||
NEW.address->'postcode');
|
NEW.address->'postcode');
|
||||||
|
|
||||||
|
-- Short-cut out for linked places. Note that this must happen after the
|
||||||
|
-- address rank has been recomputed. The linking might nullify a shift in
|
||||||
|
-- address rank.
|
||||||
|
IF NEW.linked_place_id is not null THEN
|
||||||
|
NEW.token_info := null;
|
||||||
|
{% if debug %}RAISE WARNING 'place already linked to %', OLD.linked_place_id;{% endif %}
|
||||||
|
RETURN NEW;
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- We must always increase the address level relative to the admin boundary.
|
-- We must always increase the address level relative to the admin boundary.
|
||||||
IF NEW.class = 'boundary' and NEW.type = 'administrative'
|
IF NEW.class = 'boundary' and NEW.type = 'administrative'
|
||||||
and NEW.osm_type = 'R' and NEW.rank_address > 0
|
and NEW.osm_type = 'R' and NEW.rank_address > 0
|
||||||
@@ -1001,7 +1005,14 @@ BEGIN
|
|||||||
-- Full indexing
|
-- Full indexing
|
||||||
{% if debug %}RAISE WARNING 'Using full index mode for % %', NEW.osm_type, NEW.osm_id;{% endif %}
|
{% if debug %}RAISE WARNING 'Using full index mode for % %', NEW.osm_type, NEW.osm_id;{% endif %}
|
||||||
IF linked_place is not null THEN
|
IF linked_place is not null THEN
|
||||||
SELECT * INTO location FROM placex WHERE place_id = linked_place;
|
-- Recompute the ranks here as the ones from the linked place might
|
||||||
|
-- have been shifted to accomodate surrounding boundaries.
|
||||||
|
SELECT place_id, osm_id, class, type, extratags,
|
||||||
|
centroid, geometry,
|
||||||
|
(compute_place_rank(country_code, osm_type, class, type, admin_level,
|
||||||
|
(extratags->'capital') = 'yes', null)).*
|
||||||
|
INTO location
|
||||||
|
FROM placex WHERE place_id = linked_place;
|
||||||
|
|
||||||
{% if debug %}RAISE WARNING 'Linked %', location;{% endif %}
|
{% if debug %}RAISE WARNING 'Linked %', location;{% endif %}
|
||||||
|
|
||||||
@@ -1012,11 +1023,11 @@ BEGIN
|
|||||||
NEW.centroid := geom;
|
NEW.centroid := geom;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
{% if debug %}RAISE WARNING 'parent address: % rank address: %', parent_address_level, location.rank_address;{% endif %}
|
{% if debug %}RAISE WARNING 'parent address: % rank address: %', parent_address_level, location.address_rank;{% endif %}
|
||||||
IF location.rank_address > parent_address_level
|
IF location.address_rank > parent_address_level
|
||||||
and location.rank_address < 26
|
and location.address_rank < 26
|
||||||
THEN
|
THEN
|
||||||
NEW.rank_address := location.rank_address;
|
NEW.rank_address := location.address_rank;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- merge in extra tags
|
-- merge in extra tags
|
||||||
@@ -1025,7 +1036,9 @@ BEGIN
|
|||||||
|| coalesce(NEW.extratags, ''::hstore);
|
|| coalesce(NEW.extratags, ''::hstore);
|
||||||
|
|
||||||
-- mark the linked place (excludes from search results)
|
-- mark the linked place (excludes from search results)
|
||||||
UPDATE placex set linked_place_id = NEW.place_id
|
-- Force reindexing to remove any traces from the search indexes and
|
||||||
|
-- reset the address rank if necessary.
|
||||||
|
UPDATE placex set linked_place_id = NEW.place_id, indexed_status = 2
|
||||||
WHERE place_id = location.place_id;
|
WHERE place_id = location.place_id;
|
||||||
-- ensure that those places are not found anymore
|
-- ensure that those places are not found anymore
|
||||||
{% if 'search_name' in db.tables %}
|
{% if 'search_name' in db.tables %}
|
||||||
|
|||||||
@@ -238,3 +238,29 @@ Feature: Updates of linked places
|
|||||||
Then placex contains
|
Then placex contains
|
||||||
| object | extratags |
|
| object | extratags |
|
||||||
| R1 | 'linked_place' : 'town' |
|
| R1 | 'linked_place' : 'town' |
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Keep linking and ranks when place type changes
|
||||||
|
Given the grid
|
||||||
|
| 1 | | | 2 |
|
||||||
|
| | | 9 | |
|
||||||
|
| 4 | | | 3 |
|
||||||
|
And the places
|
||||||
|
| osm | class | type | name | admin | geometry |
|
||||||
|
| R1 | boundary | administrative | foo | 8 | (1,2,3,4,1) |
|
||||||
|
And the places
|
||||||
|
| osm | class | type | name | geometry |
|
||||||
|
| N1 | place | city | foo | 9 |
|
||||||
|
When importing
|
||||||
|
Then placex contains
|
||||||
|
| object | linked_place_id | rank_address |
|
||||||
|
| N1 | R1 | 16 |
|
||||||
|
| R1 | - | 16 |
|
||||||
|
|
||||||
|
When updating places
|
||||||
|
| osm | class | type | name | geometry |
|
||||||
|
| N1 | place | town | foo | 9 |
|
||||||
|
Then placex contains
|
||||||
|
| object | linked_place_id | rank_address |
|
||||||
|
| N1 | R1 | 16 |
|
||||||
|
| R1 | - | 16 |
|
||||||
|
|||||||
Reference in New Issue
Block a user