X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/b14ce959d9532f192b748b12f6c71f23a9c1a60b..7205491b8495e48c62b28373d1746e77d475582b:/lib-php/TokenSpecialTerm.php diff --git a/lib-php/TokenSpecialTerm.php b/lib-php/TokenSpecialTerm.php index 355dbb91..475ae71b 100644 --- a/lib-php/TokenSpecialTerm.php +++ b/lib-php/TokenSpecialTerm.php @@ -1,4 +1,12 @@ hasOperator() && $oPosition->isPhrase(''); + return !$oSearch->hasOperator() + && $oPosition->isPhrase('') + && ($this->iOperator != \Nominatim\Operator::NONE + || (!$oSearch->hasAddress() && !$oSearch->hasHousenumber() && !$oSearch->hasCountry())); } /** @@ -58,19 +69,31 @@ class SpecialTerm */ public function extendSearch($oSearch, $oPosition) { - $iSearchCost = 2; + $iSearchCost = 0; $iOp = $this->iOperator; if ($iOp == \Nominatim\Operator::NONE) { - if ($oSearch->hasName() || $oSearch->getContext()->isBoundedSearch()) { + if ($oPosition->isFirstToken() + || $oSearch->hasName() + || $oSearch->getContext()->isBoundedSearch() + ) { $iOp = \Nominatim\Operator::NAME; + $iSearchCost += 3; } else { $iOp = \Nominatim\Operator::NEAR; + $iSearchCost += 4; + if (!$oPosition->isFirstToken()) { + $iSearchCost += 3; + } } + } elseif ($oPosition->isFirstToken()) { $iSearchCost += 2; - } elseif (!$oPosition->isFirstToken() && !$oPosition->isLastToken()) { - $iSearchCost += 2; + } elseif ($oPosition->isLastToken()) { + $iSearchCost += 4; + } else { + $iSearchCost += 6; } + if ($oSearch->hasHousenumber()) { $iSearchCost ++; }