X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/a48ebd9b477318bc5fdb44d7dc6bbf695911a4b9..aca6439eb7bc2cc6a6c2d7df0ebdb299c96c9c41:/lib-php/TokenSpecialTerm.php diff --git a/lib-php/TokenSpecialTerm.php b/lib-php/TokenSpecialTerm.php index 89dfa026..6eb2ede3 100644 --- a/lib-php/TokenSpecialTerm.php +++ b/lib-php/TokenSpecialTerm.php @@ -10,13 +10,13 @@ require_once(CONST_LibDir.'/SpecialSearchOperator.php'); class SpecialTerm { /// Database word id, if applicable. - public $iId; + private $iId; /// Class (or OSM tag key) of the place to look for. - public $sClass; + private $sClass; /// Type (or OSM tag value) of the place to look for. - public $sType; + private $sType; /// Relationship of the operator to the object (see Operator class). - public $iOperator; + private $iOperator; public function __construct($iID, $sClass, $sType, $iOperator) { @@ -31,6 +31,25 @@ class SpecialTerm return $this->iId; } + /** + * Check if the token can be added to the given search. + * Derive new searches by adding this token to an existing search. + * + * @param object $oSearch Partial search description derived so far. + * @param object $oPosition Description of the token position within + the query. + * + * @return True if the token is compatible with the search configuration + * given the position. + */ + public function isExtendable($oSearch, $oPosition) + { + return !$oSearch->hasOperator() + && $oPosition->isPhrase('') + && ($this->iOperator != \Nominatim\Operator::NONE + || (!$oSearch->hasAddress() && !$oSearch->hasHousenumber() && !$oSearch->hasCountry())); + } + /** * Derive new searches by adding this token to an existing search. * @@ -42,10 +61,6 @@ class SpecialTerm */ public function extendSearch($oSearch, $oPosition) { - if ($oSearch->hasOperator() || !$oPosition->isPhrase('')) { - return array(); - } - $iSearchCost = 2; $iOp = $this->iOperator; @@ -54,8 +69,8 @@ class SpecialTerm $iOp = \Nominatim\Operator::NAME; } else { $iOp = \Nominatim\Operator::NEAR; + $iSearchCost += 2; } - $iSearchCost += 2; } elseif (!$oPosition->isFirstToken() && !$oPosition->isLastToken()) { $iSearchCost += 2; }