X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/474418f03cf3a1dcb742a526a455f7721d5d0af6..bd0316b5c3c0e84da952ce63bf7e51c65c6e1433:/lib-php/SearchDescription.php?ds=sidebyside diff --git a/lib-php/SearchDescription.php b/lib-php/SearchDescription.php index a7b26c12..5d2caf00 100644 --- a/lib-php/SearchDescription.php +++ b/lib-php/SearchDescription.php @@ -236,7 +236,7 @@ class SearchDescription * Add the given full-word token to the list of terms to search for in the * name. * - * @param interger iId ID of term to add. + * @param integer iId ID of term to add. * @param bool bRareName True if the term is infrequent enough to not * require other constraints for efficient search. */ @@ -264,6 +264,8 @@ class SearchDescription { if (empty($this->aName)) { $this->bNameNeedsAddress = $bNeedsAddress; + } elseif ($bSearchable && count($this->aName) >= 2) { + $this->bNameNeedsAddress = false; } else { $this->bNameNeedsAddress &= $bNeedsAddress; } @@ -385,7 +387,7 @@ class SearchDescription * * @return mixed[] An array with two fields: IDs contains the list of * matching place IDs and houseNumber the houseNumber - * if appicable or -1 if not. + * if applicable or -1 if not. */ public function query(&$oDB, $iMinRank, $iMaxRank, $iLimit) { @@ -642,6 +644,7 @@ class SearchDescription // Housenumbers on streets and places. $sPlacexSql = 'SELECT array_agg(place_id) FROM placex'; $sPlacexSql .= ' WHERE parent_place_id = sin.place_id AND sin.address_rank < 30'; + $sPlacexSql .= $this->oContext->excludeSQL(' AND place_id'); $sPlacexSql .= ' and housenumber ~* E'.$sHouseNumberRegex; // Interpolations on streets and places. @@ -650,7 +653,8 @@ class SearchDescription if (preg_match('/^[0-9]+$/', $this->sHouseNumber)) { $sIpolHnr = 'WHERE parent_place_id = sin.place_id '; $sIpolHnr .= ' AND startnumber is not NULL AND sin.address_rank < 30'; - $sIpolHnr .= ' AND '.$this->sHouseNumber.' between startnumber and endnumber '; + $sIpolHnr .= ' AND '.$this->sHouseNumber.' between startnumber and endnumber'; + $sIpolHnr .= ' AND ('.$this->sHouseNumber.' - startnumber) % step = 0'; $sInterpolSql = 'SELECT array_agg(place_id) FROM location_property_osmline '.$sIpolHnr; if (CONST_Use_US_Tiger_Data) { @@ -803,6 +807,7 @@ class SearchDescription $sSQL = 'SELECT geometry FROM placex'; $sSQL .= " WHERE place_id in ($sPlaceIDs)"; $sSQL .= " AND rank_search < $iMaxRank + 5"; + $sSQL .= ' AND ST_Area(Box2d(geometry)) < 20'; $sSQL .= " AND ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon')"; $sSQL .= ' ORDER BY rank_search ASC '; $sSQL .= ' LIMIT 1';