forked from hans/Nominatim
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:
@@ -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 ++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user