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.
*/
public function extendSearch($oSearch, $oPosition)
{
*/
public function extendSearch($oSearch, $oPosition)
{
$iOp = $this->iOperator;
if ($iOp == \Nominatim\Operator::NONE) {
$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;
$iOp = \Nominatim\Operator::NAME;
} else {
$iOp = \Nominatim\Operator::NEAR;
} else {
$iOp = \Nominatim\Operator::NEAR;
+ $iSearchCost += 4;
+ if (!$oPosition->isFirstToken()) {
+ $iSearchCost += 3;
+ }
- } elseif (!$oPosition->isFirstToken() && !$oPosition->isLastToken()) {
+ } elseif ($oPosition->isFirstToken()) {
+ } elseif ($oPosition->isLastToken()) {
+ $iSearchCost += 4;
+ } else {
+ $iSearchCost += 6;
if ($oSearch->hasHousenumber()) {
$iSearchCost ++;
}
if ($oSearch->hasHousenumber()) {
$iSearchCost ++;
}