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.
This commit is contained in:
Sarah Hoffmann
2022-11-15 11:55:40 +01:00
parent a856c56450
commit 05863ae5ca

View File

@@ -69,19 +69,31 @@ class SpecialTerm
*/ */
public function extendSearch($oSearch, $oPosition) public function extendSearch($oSearch, $oPosition)
{ {
$iSearchCost = 2; $iSearchCost = 0;
$iOp = $this->iOperator; $iOp = $this->iOperator;
if ($iOp == \Nominatim\Operator::NONE) { if ($iOp == \Nominatim\Operator::NONE) {
if ($oSearch->hasName() || $oSearch->getContext()->isBoundedSearch()) { if ($oPosition->isFirstToken()
|| $oSearch->hasName()
|| $oSearch->getContext()->isBoundedSearch()
) {
$iOp = \Nominatim\Operator::NAME; $iOp = \Nominatim\Operator::NAME;
$iSearchCost += 3;
} else { } else {
$iOp = \Nominatim\Operator::NEAR; $iOp = \Nominatim\Operator::NEAR;
$iSearchCost += 2; $iSearchCost += 4;
if (!$oPosition->isFirstToken()) {
$iSearchCost += 3;
}
} }
} elseif (!$oPosition->isFirstToken() && !$oPosition->isLastToken()) { } elseif ($oPosition->isFirstToken()) {
$iSearchCost += 2; $iSearchCost += 2;
} elseif ($oPosition->isLastToken()) {
$iSearchCost += 4;
} else {
$iSearchCost += 6;
} }
if ($oSearch->hasHousenumber()) { if ($oSearch->hasHousenumber()) {
$iSearchCost ++; $iSearchCost ++;
} }