From: Sarah Hoffmann Date: Tue, 6 Jun 2017 18:55:15 +0000 (+0200) Subject: Merge pull request #745 from lonvia/restrict-poi-queries-results X-Git-Tag: v3.0.0~13 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/6985abc3fd16dd5a8f8de91ec1d798238ea10709?hp=0628aa887fb8b0b367fa8aacb4d4473661b77fa5 Merge pull request #745 from lonvia/restrict-poi-queries-results limit number of considered places in POI queries --- diff --git a/lib/Geocode.php b/lib/Geocode.php index 17aaf826..80449cb6 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -1555,8 +1555,9 @@ class Geocode } if (!$aSearch['sOperator'] || $aSearch['sOperator'] == 'near') { // & in + $sClassTable = 'place_classtype_'.$aSearch['sClass'].'_'.$aSearch['sType']; $sSQL = "SELECT count(*) FROM pg_tables "; - $sSQL .= "WHERE tablename = 'place_classtype_".$aSearch['sClass']."_".$aSearch['sType']."'"; + $sSQL .= "WHERE tablename = '$sClassTable'"; $bCacheTable = chksql($this->oDB->getOne($sSQL)); $sSQL = "SELECT min(rank_search) FROM placex WHERE place_id in ($sPlaceIDs)"; @@ -1604,7 +1605,8 @@ class Geocode $sOrderBysSQL = "ST_Distance(st_centroid('".$sPlaceGeom."'), l.centroid)"; } - $sSQL = "select distinct l.place_id".($sOrderBySQL?','.$sOrderBySQL:'')." from place_classtype_".$aSearch['sClass']."_".$aSearch['sType']." as l"; + $sSQL = "select distinct i.place_id".($sOrderBySQL?', i.order_term':'')." from ("; + $sSQL .= "select l.place_id".($sOrderBySQL?','.$sOrderBySQL.' as order_term':'')." from ".$sClassTable." as l"; if ($sCountryCodesSQL) $sSQL .= " join placex as lp using (place_id)"; if ($sPlaceIDs) { $sSQL .= ",placex as f where "; @@ -1618,7 +1620,8 @@ class Geocode $sSQL .= " and l.place_id not in (".join(',', $this->aExcludePlaceIDs).")"; } if ($sCountryCodesSQL) $sSQL .= " and lp.country_code in ($sCountryCodesSQL)"; - if ($sOrderBySQL) $sSQL .= "order by ".$sOrderBySQL." asc"; + $sSQL .= 'limit 300) i '; + if ($sOrderBySQL) $sSQL .= "order by order_term asc"; if ($this->iOffset) $sSQL .= " offset $this->iOffset"; $sSQL .= " limit $this->iLimit"; if (CONST_Debug) var_dump($sSQL); diff --git a/test/bdd/api/search/queries.feature b/test/bdd/api/search/queries.feature index 0074e334..638177fd 100644 --- a/test/bdd/api/search/queries.feature +++ b/test/bdd/api/search/queries.feature @@ -52,7 +52,7 @@ Feature: Search queries | way | Scenario: Search with class-type feature - When sending jsonv2 search query "Hotel California" + When sending jsonv2 search query "Hotel in California" Then results contain | place_rank | | 30 |