From acd8ca2ebda96c7dd6d7e2485a5c9c87dade0ffa Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Fri, 21 Feb 2020 16:35:59 +0100 Subject: [PATCH 1/1] add testing for rank adaption while linking --- lib/Geocode.php | 4 +--- lib/SearchDescription.php | 5 +---- sql/functions/placex_triggers.sql | 6 ++++-- test/bdd/db/import/linking.feature | 31 +++++++++++++++++++++++++++--- test/bdd/steps/queries.py | 3 ++- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/lib/Geocode.php b/lib/Geocode.php index f45b2caa..ab9446e0 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -808,9 +808,7 @@ class Geocode $sSQL .= 'WHERE place_id in ('.$sPlaceIds.') '; $sSQL .= ' AND ('; $sSQL .= " placex.rank_address between $this->iMinAddressRank and $this->iMaxAddressRank "; - if (14 >= $this->iMinAddressRank && 14 <= $this->iMaxAddressRank) { - $sSQL .= " OR (extratags->'place') = 'city'"; - } + $sSQL .= " OR placex.rank_search between $this->iMinAddressRank and $this->iMaxAddressRank "; if ($this->aAddressRankList) { $sSQL .= ' OR placex.rank_address in ('.join(',', $this->aAddressRankList).')'; } diff --git a/lib/SearchDescription.php b/lib/SearchDescription.php index 4fafbec2..bb478b29 100644 --- a/lib/SearchDescription.php +++ b/lib/SearchDescription.php @@ -660,10 +660,7 @@ class SearchDescription $aTerms[] = 'address_rank between 16 and 27'; } elseif (!$this->sClass || $this->iOperator == Operator::NAME) { if ($iMinAddressRank > 0) { - $aTerms[] = 'address_rank >= '.$iMinAddressRank; - } - if ($iMaxAddressRank < 30) { - $aTerms[] = 'address_rank <= '.$iMaxAddressRank; + $aTerms[] = "((address_rank between $iMinAddressRank and $iMaxAddressRank) or (search_rank between $iMinAddressRank and $iMaxAddressRank))"; } } diff --git a/sql/functions/placex_triggers.sql b/sql/functions/placex_triggers.sql index 9743eead..e16b7783 100644 --- a/sql/functions/placex_triggers.sql +++ b/sql/functions/placex_triggers.sql @@ -841,8 +841,10 @@ BEGIN NEW.centroid := coalesce(location.centroid, ST_Centroid(location.geometry)); - -- Use the address rank of the linked place - NEW.rank_address := location.rank_address; + -- Use the address rank of the linked place, if it has one + IF location.rank_address between 5 and 25 THEN + NEW.rank_address := location.rank_address; + END IF; -- merge in the label name IF NOT location.name IS NULL THEN diff --git a/test/bdd/db/import/linking.feature b/test/bdd/db/import/linking.feature index 646f89da..1bca7dfc 100644 --- a/test/bdd/db/import/linking.feature +++ b/test/bdd/db/import/linking.feature @@ -146,7 +146,7 @@ Feature: Linking of places Scenario: Boundaries with place tags are linked against places with same type Given the places | osm | class | type | admin | name | extra+place | geometry | - | R13 | boundary | administrative | 5 | Berlin | city |poly-area:0.1 | + | R13 | boundary | administrative | 4 | Berlin | city |poly-area:0.1 | And the places | osm | class | type | name | geometry | | N2 | place | city | Berlin | 0.006 0.00001 | @@ -157,11 +157,24 @@ Feature: Linking of places And placex contains | object | rank_address | | R13 | 16 | + When searching for "" + | city | + | Berlin | + Then results contain + | ID | osm_type | osm_id | + | 0 | R | 13 | + When searching for "" + | state | + | Berlin | + Then results contain + | ID | osm_type | osm_id | + | 0 | R | 13 | + Scenario: Boundaries without place tags only link against same admin level Given the places | osm | class | type | admin | name | geometry | - | R13 | boundary | administrative | 5 | Berlin |poly-area:0.1 | + | R13 | boundary | administrative | 4 | Berlin |poly-area:0.1 | And the places | osm | class | type | name | geometry | | N2 | place | city | Berlin | 0.006 0.00001 | @@ -171,5 +184,17 @@ Feature: Linking of places | N2 | - | And placex contains | object | rank_address | - | R13 | 10 | + | R13 | 8 | + When searching for "" + | state | + | Berlin | + Then results contain + | ID | osm_type | osm_id | + | 0 | R | 13 | + When searching for "" + | city | + | Berlin | + Then results contain + | ID | osm_type | osm_id | + | 0 | N | 2 | diff --git a/test/bdd/steps/queries.py b/test/bdd/steps/queries.py index 3f0cffff..4e6ec1ff 100644 --- a/test/bdd/steps/queries.py +++ b/test/bdd/steps/queries.py @@ -297,7 +297,8 @@ def query_cmd(context, query, dups): """ cmd = ['/usr/bin/env', 'php'] cmd.append(os.path.join(context.nominatim.build_dir, 'utils', 'query.php')) - cmd.extend(['--search', query]) + if query: + cmd.extend(['--search', query]) # add more parameters in table form if context.table: for h in context.table.headings: -- 2.39.5