X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/a727823ae20c61a7d2287bfe47ba3dc49c89bf58..c1fdb9a915f673239f686ff37da03da10ea1186c:/lib/Geocode.php diff --git a/lib/Geocode.php b/lib/Geocode.php index 85aa31f0..202917a2 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -443,7 +443,7 @@ return $aSearchResults; } - function getGroupedSearches($aSearches, $aPhrases, $aValidTokens, $aWordFrequencyScores, $bStructuredPhrases) + function getGroupedSearches($aSearches, $aPhraseTypes, $aPhrases, $aValidTokens, $aWordFrequencyScores, $bStructuredPhrases) { /* Calculate all searches using aValidTokens i.e. @@ -613,7 +613,10 @@ } } } - if (isset($aValidTokens[$sToken])) + // Look for partial matches. + // Note that there is no point in adding country terms here + // because country are omitted in the address. + if (isset($aValidTokens[$sToken]) && $sPhraseType != 'country') { // Allow searching for a word - but at extra cost foreach($aValidTokens[$sToken] as $aSearchTerm) @@ -1041,7 +1044,7 @@ // Start the search process $aResultPlaceIDs = array(); - $aGroupedSearches = $this->getGroupedSearches($aSearches, $aPhrases, $aValidTokens, $aWordFrequencyScores, $bStructuredPhrases); + $aGroupedSearches = $this->getGroupedSearches($aSearches, $aPhraseTypes, $aPhrases, $aValidTokens, $aWordFrequencyScores, $bStructuredPhrases); if ($this->bReverseInPlan) { @@ -1055,7 +1058,7 @@ $aFinalPhrase = end($aPhrases); $aFinalPhrase['wordsets'] = getInverseWordSets($aFinalPhrase['words'], 0); } - $aReverseGroupedSearches = $this->getGroupedSearches($aSearches, $aPhrases, $aValidTokens, $aWordFrequencyScores, false); + $aReverseGroupedSearches = $this->getGroupedSearches($aSearches, null, $aPhrases, $aValidTokens, $aWordFrequencyScores, false); foreach($aGroupedSearches as $aSearches) { @@ -1171,7 +1174,7 @@ $sSQL = "select place_id from placex where calculated_country_code='".$aSearch['sCountryCode']."' and rank_search = 4"; if ($sCountryCodesSQL) $sSQL .= " and calculated_country_code in ($sCountryCodesSQL)"; if ($bBoundingBoxSearch) - $sSQL .= " and st_overlaps($this->sViewboxSmallSQL, geometry)"; + $sSQL .= " and _st_intersects($this->sViewboxSmallSQL, geometry)"; $sSQL .= " order by st_area(geometry) desc limit 1"; if (CONST_Debug) var_dump($sSQL); $aPlaceIDs = $this->oDB->getCol($sSQL); @@ -1785,7 +1788,6 @@ $bFirst = true; foreach($aToFilter as $iResNum => $aResult) { - if ($aResult['type'] == 'adminitrative') $aResult['type'] = 'administrative'; $this->aExcludePlaceIDs[$aResult['place_id']] = $aResult['place_id']; if ($bFirst) {