From: Sarah Hoffmann Date: Fri, 13 Oct 2017 20:23:39 +0000 (+0200) Subject: simplify cross-check of country tokens X-Git-Tag: v3.1.0~43^2~3 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/77b76ae51bc4751c02e58678e9003fa9838abcf1 simplify cross-check of country tokens Drop country tokens that do not match the country code list early. Remove in turn the special country code check for structured phrases. It is sufficient to do this during word list building. --- diff --git a/lib/Geocode.php b/lib/Geocode.php index 9115be0b..faf9e770 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -802,7 +802,7 @@ class Geocode // Revisit searches, drop bad searches and give penalty to unlikely combinations. $aGroupedSearches = array(); foreach ($aSearches as $oSearch) { - if (!$oSearch->isValidSearch($this->aCountryCodes)) { + if (!$oSearch->isValidSearch()) { continue; } @@ -991,9 +991,10 @@ class Geocode ); $aWordFrequencyScores = array(); foreach ($aDatabaseWords as $aToken) { - // Very special case - require 2 letter country param to match the country code found - if ($bStructuredPhrases && $aToken['country_code'] && !empty($this->aStructuredQuery['country']) - && strlen($this->aStructuredQuery['country']) == 2 && strtolower($this->aStructuredQuery['country']) != $aToken['country_code'] + // Filter country tokens that do not match restricted countries. + if ($this->aCountryCodes + && $aToken['country_code'] + && !in_array($aToken['country_code'], $this->aCountryCodes) ) { continue; } diff --git a/lib/SearchDescription.php b/lib/SearchDescription.php index 143d2864..ea7c96ef 100644 --- a/lib/SearchDescription.php +++ b/lib/SearchDescription.php @@ -155,22 +155,17 @@ class SearchDescription /** * Check if the combination of parameters is sensible. * - * @param string[] $aCountryCodes List of country codes. - * * @return bool True, if the search looks valid. */ - public function isValidSearch(&$aCountryCodes) + public function isValidSearch() { if (!sizeof($this->aName)) { if ($this->sHouseNumber) { return false; } - } - if ($aCountryCodes - && $this->sCountryCode - && !in_array($this->sCountryCode, $aCountryCodes) - ) { - return false; + if (!$this->sClass && !$this->sCountryCode) { + return false; + } } return true; @@ -302,7 +297,10 @@ class SearchDescription $oSearch->setPoiSearch($iOp, $aSearchTerm['class'], $aSearchTerm['type']); $aNewSearches[] = $oSearch; } - } elseif (isset($aSearchTerm['word_id']) && $aSearchTerm['word_id']) { + } elseif (isset($aSearchTerm['word_id']) + && $aSearchTerm['word_id'] + && $sPhraseType != 'country' + ) { $iWordID = $aSearchTerm['word_id']; if (sizeof($this->aName)) { if (($sPhraseType == '' || !$bFirstPhrase)