]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib/SearchDescription.php
downgrade housenumbers without numbers
[nominatim.git] / lib / SearchDescription.php
index 204a735885f8d3222e6ab1b5236e91f7f87a712f..f5179ce1b4d786ae94f1752d4e47e71eb73c3dc4 100644 (file)
@@ -237,7 +237,8 @@ class SearchDescription
                 $oSearch->sHouseNumber = $oSearchTerm->sToken;
                 // sanity check: if the housenumber is not mainly made
                 // up of numbers, add a penalty
-                if (preg_match_all('/[^0-9]/', $oSearch->sHouseNumber, $aMatches) > 2) {
+                if (preg_match('/\\d/', $oSearch->sHouseNumber) === 0
+                    || preg_match_all('/[^0-9]/', $oSearch->sHouseNumber, $aMatches) > 2) {
                     $oSearch->iSearchRank++;
                 }
                 if (empty($oSearchTerm->iId)) {
@@ -448,13 +449,17 @@ class SearchDescription
 
             //now search for housenumber, if housenumber provided
             if ($this->sHouseNumber && !empty($aResults)) {
-                $aNamedPlaceIDs = $aResults;
-                $aResults = $this->queryHouseNumber($oDB, $aNamedPlaceIDs);
+                // Downgrade the rank of the street results, they are missing
+                // the housenumber.
+                foreach ($aResults as $oRes) {
+                    $oRes->iResultRank++;
+                }
+
+                $aHnResults = $this->queryHouseNumber($oDB, $aResults);
 
-                if (empty($aResults) && $this->looksLikeFullAddress()) {
-                    $aResults = $aNamedPlaceIDs;
-                    foreach ($aResults as $oRes) {
-                        $oRes->iResultRank++;
+                if (!empty($aHnResults)) {
+                    foreach ($aHnResults as $oRes) {
+                        $aResults[$oRes->iId] = $oRes;
                     }
                 }
             }