mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-25 18:48:15 +00:00
fix postcode search
Name token must be fully replaced with the postcode and postcode search must be done only once.
This commit is contained in:
@@ -732,6 +732,8 @@ class Geocode
|
|||||||
|
|
||||||
// If the token is valid
|
// If the token is valid
|
||||||
if (isset($aValidTokens[' '.$sToken])) {
|
if (isset($aValidTokens[' '.$sToken])) {
|
||||||
|
// TODO variable should go into aCurrentSearch
|
||||||
|
$bHavePostcode = false;
|
||||||
foreach ($aValidTokens[' '.$sToken] as $aSearchTerm) {
|
foreach ($aValidTokens[' '.$sToken] as $aSearchTerm) {
|
||||||
$aSearch = $aCurrentSearch;
|
$aSearch = $aCurrentSearch;
|
||||||
$aSearch['iSearchRank']++;
|
$aSearch['iSearchRank']++;
|
||||||
@@ -744,9 +746,9 @@ class Geocode
|
|||||||
}
|
}
|
||||||
if ($aSearch['iSearchRank'] < $this->iMaxRank) $aNewWordsetSearches[] = $aSearch;
|
if ($aSearch['iSearchRank'] < $this->iMaxRank) $aNewWordsetSearches[] = $aSearch;
|
||||||
}
|
}
|
||||||
} elseif ($sPhraseType == 'postalcode' || ($aSearchTerm['class'] == 'place' && $aSearchTerm['type'] == 'postcode')) {
|
} elseif (($sPhraseType == '' || $sPhraseType == 'postalcode') && $aSearchTerm['class'] == 'place' && $aSearchTerm['type'] == 'postcode') {
|
||||||
// We need to try the case where the postal code is the primary element (i.e. no way to tell if it is (postalcode, city) OR (city, postalcode) so try both
|
// We need to try the case where the postal code is the primary element (i.e. no way to tell if it is (postalcode, city) OR (city, postalcode) so try both
|
||||||
if ($aSearch['sPostcode'] === '' && $aSearch['sHouseNumber'] === '' &&
|
if (!$bHavePostcode && $aSearch['sPostcode'] === '' && $aSearch['sHouseNumber'] === '' &&
|
||||||
isset($aSearchTerm['word']) && $aSearchTerm['word'] && strpos($sNormQuery, $this->normTerm($aSearchTerm['word'])) !== false) {
|
isset($aSearchTerm['word']) && $aSearchTerm['word'] && strpos($sNormQuery, $this->normTerm($aSearchTerm['word'])) !== false) {
|
||||||
// If we have structured search or this is the first term,
|
// If we have structured search or this is the first term,
|
||||||
// make the postcode the primary search element.
|
// make the postcode the primary search element.
|
||||||
@@ -754,8 +756,9 @@ class Geocode
|
|||||||
$aNewSearch = $aSearch;
|
$aNewSearch = $aSearch;
|
||||||
$aNewSearch['sOperator'] = 'postcode';
|
$aNewSearch['sOperator'] = 'postcode';
|
||||||
$aNewSearch['aAddress'] = array_merge($aNewSearch['aAddress'], $aNewSearch['aName']);
|
$aNewSearch['aAddress'] = array_merge($aNewSearch['aAddress'], $aNewSearch['aName']);
|
||||||
$aNewSearch['aName'][$aSearchTerm['word_id']] = $aSearchTerm['word'];
|
$aNewSearch['aName'] = array($aSearchTerm['word_id'] => $aSearchTerm['word']);
|
||||||
if ($aSearch['iSearchRank'] < $this->iMaxRank) $aNewWordsetSearches[] = $aNewSearch;
|
if ($aSearch['iSearchRank'] < $this->iMaxRank) $aNewWordsetSearches[] = $aNewSearch;
|
||||||
|
$bHavePostcode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we have a structured search or this is not the first term,
|
// If we have a structured search or this is not the first term,
|
||||||
|
|||||||
Reference in New Issue
Block a user