]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-php/TokenHousenumber.php
Merge pull request #2529 from lonvia/sort-street-results-by-tiger-housenumber
[nominatim.git] / lib-php / TokenHousenumber.php
index 0cc67a1212d17fc8bbd5a6251f5b86827fc05efe..ea7a052e5e65f51ab3f003e8cb75cee58fc134dc 100644 (file)
@@ -23,6 +23,24 @@ class HouseNumber
         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->hasHousenumber()
+               && !$oSearch->hasOperator(\Nominatim\Operator::POSTCODE)
+               && $oPosition->maybePhrase('street');
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -36,19 +54,12 @@ class HouseNumber
     {
         $aNewSearches = array();
 
-        if ($oSearch->hasHousenumber()
-            || $oSearch->hasOperator(\Nominatim\Operator::POSTCODE)
-            || !$oPosition->maybePhrase('street')
-        ) {
-            return $aNewSearches;
-        }
-
         // sanity check: if the housenumber is not mainly made
         // up of numbers, add a penalty
         $iSearchCost = 1;
         if (preg_match('/\\d/', $this->sToken) === 0
-            || preg_match_all('/[^0-9]/', $this->sToken, $aMatches) > 2) {
-            $iSearchCost++;
+            || preg_match_all('/[^0-9 ]/', $this->sToken, $aMatches) > 3) {
+            $iSearchCost += strlen($this->sToken) - 1;
         }
         if (!$oSearch->hasOperator(\Nominatim\Operator::NONE)) {
             $iSearchCost++;