X-Git-Url: https://git.openstreetmap.org/nominatim.git/blobdiff_plain/6070c3d1d58fb8737b387e8a3ef1f17fb1eb5d54..9750a361c9221583a5caaee20d944284d0e08b37:/lib-php/TokenWord.php diff --git a/lib-php/TokenWord.php b/lib-php/TokenWord.php index 6de58422..a7557d38 100644 --- a/lib-php/TokenWord.php +++ b/lib-php/TokenWord.php @@ -1,4 +1,12 @@ iTermCount = $iTermCount; } + public function getId() + { + 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 !$oPosition->isPhrase('country'); + } + + /** + * 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 SearchDescription[] List of derived search descriptions. + */ + public function extendSearch($oSearch, $oPosition) + { + // Full words can only be a name if they appear at the beginning + // of the phrase. In structured search the name must forcibly in + // the first phrase. In unstructured search it may be in a later + // phrase when the first phrase is a house number. + if ($oSearch->hasName() + || !($oPosition->isFirstPhrase() || $oPosition->isPhrase('')) + ) { + if ($this->iTermCount > 1 + && ($oPosition->isPhrase('') || !$oPosition->isFirstPhrase()) + ) { + $oNewSearch = $oSearch->clone(1); + $oNewSearch->addAddressToken($this->iId); + + return array($oNewSearch); + } + } elseif (!$oSearch->hasName(true)) { + $oNewSearch = $oSearch->clone(1); + $oNewSearch->addNameToken( + $this->iId, + CONST_Search_NameOnlySearchFrequencyThreshold + && $this->iSearchNameCount + < CONST_Search_NameOnlySearchFrequencyThreshold + ); + + return array($oNewSearch); + } + + return array(); + } + public function debugInfo() { return array( @@ -32,4 +102,9 @@ class Word ) ); } + + public function debugCode() + { + return 'W'; + } }