From 3059a3da4e7f1a156c4c892f818446f1493e03b5 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Tue, 15 Nov 2022 11:55:40 +0100 Subject: [PATCH] correctly handle special term + name combination Special terms with operator name usually appear in combination with the name. The current penalties only took name + special term into account not special term + name. Fixes #2876. --- lib-php/TokenSpecialTerm.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lib-php/TokenSpecialTerm.php b/lib-php/TokenSpecialTerm.php index cdd04e6c..475ae71b 100644 --- a/lib-php/TokenSpecialTerm.php +++ b/lib-php/TokenSpecialTerm.php @@ -69,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 += 2; + $iSearchCost += 4; + if (!$oPosition->isFirstToken()) { + $iSearchCost += 3; + } } - } elseif (!$oPosition->isFirstToken() && !$oPosition->isLastToken()) { + } elseif ($oPosition->isFirstToken()) { $iSearchCost += 2; + } elseif ($oPosition->isLastToken()) { + $iSearchCost += 4; + } else { + $iSearchCost += 6; } + if ($oSearch->hasHousenumber()) { $iSearchCost ++; } -- 2.39.5