From: Sarah Hoffmann Date: Sat, 26 Jun 2021 08:31:55 +0000 (+0200) Subject: adjust penalty for housenumber-in-name searches X-Git-Tag: v4.0.0~60^2~1 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/161f5f5cee9be820d59cf7dcc500c8074b42ed83 adjust penalty for housenumber-in-name searches When searching for house numbers in the name (for place-only terms) then the same penalties need to apply as for the regular house number search. Change the code to first compute the penalties and then create the new search variants. --- diff --git a/lib-php/SearchDescription.php b/lib-php/SearchDescription.php index 67cfbad0..44d3a2a5 100644 --- a/lib-php/SearchDescription.php +++ b/lib-php/SearchDescription.php @@ -218,29 +218,31 @@ class SearchDescription && is_a($oSearchTerm, '\Nominatim\Token\HouseNumber') ) { if (!$this->sHouseNumber && $this->iOperator != Operator::POSTCODE) { - $oSearch = clone $this; - $oSearch->iSearchRank++; - $oSearch->iNamePhrase = -1; - $oSearch->sHouseNumber = $oSearchTerm->sToken; - if ($this->iOperator != Operator::NONE) { - $oSearch->iSearchRank++; - } // sanity check: if the housenumber is not mainly made // up of numbers, add a penalty - if (preg_match('/\\d/', $oSearch->sHouseNumber) === 0 - || preg_match_all('/[^0-9]/', $oSearch->sHouseNumber, $aMatches) > 2) { - $oSearch->iSearchRank++; + $iSearchCost = 1; + if (preg_match('/\\d/', $oSearchTerm->sToken) === 0 + || preg_match_all('/[^0-9]/', $oSearchTerm->sToken, $aMatches) > 2) { + $iSearchCost++; + } + if ($this->iOperator != Operator::NONE) { + $iSearchCost++; } if (empty($oSearchTerm->iId)) { - $oSearch->iSearchRank++; + $iSearchCost++; } // also must not appear in the middle of the address if (!empty($this->aAddress) || (!empty($this->aAddressNonSearch)) || $this->sPostcode ) { - $oSearch->iSearchRank++; + $iSearchCost++; } + + $oSearch = clone $this; + $oSearch->iSearchRank += $iSearchCost; + $oSearch->iNamePhrase = -1; + $oSearch->sHouseNumber = $oSearchTerm->sToken; $aNewSearches[] = $oSearch; // Housenumbers may appear in the name when the place has its own // address terms. @@ -249,7 +251,7 @@ class SearchDescription && empty($this->aAddress) ) { $oSearch = clone $this; - $oSearch->iSearchRank++; + $oSearch->iSearchRank += $iSearchCost; $oSearch->aAddress = $this->aName; $oSearch->bRareName = false; $oSearch->aName = array($oSearchTerm->iId => $oSearchTerm->iId);