fix search for postcode via structured query

Results from the artifical postcode table were dropped
when reevaluating rank of results.
This commit is contained in:
Sarah Hoffmann
2017-10-03 12:10:27 +02:00
parent eacaf3489e
commit e3323e8888
2 changed files with 21 additions and 7 deletions

View File

@@ -1738,9 +1738,11 @@ class Geocode
// Need to verify passes rank limits before dropping out of the loop (yuk!) // Need to verify passes rank limits before dropping out of the loop (yuk!)
// reduces the number of place ids, like a filter // reduces the number of place ids, like a filter
// rank_address is 30 for interpolated housenumbers // rank_address is 30 for interpolated housenumbers
$sWherePlaceId = 'WHERE place_id in (';
$sWherePlaceId .= join(',', array_keys($aResultPlaceIDs)).') ';
$sSQL = "SELECT place_id "; $sSQL = "SELECT place_id ";
$sSQL .= "FROM placex "; $sSQL .= "FROM placex ".$sWherePlaceId;
$sSQL .= "WHERE place_id in (".join(',', array_keys($aResultPlaceIDs)).") ";
$sSQL .= " AND ("; $sSQL .= " AND (";
$sSQL .= " placex.rank_address between $this->iMinAddressRank and $this->iMaxAddressRank "; $sSQL .= " placex.rank_address between $this->iMinAddressRank and $this->iMaxAddressRank ";
if (14 >= $this->iMinAddressRank && 14 <= $this->iMaxAddressRank) { if (14 >= $this->iMinAddressRank && 14 <= $this->iMaxAddressRank) {
@@ -1749,18 +1751,22 @@ class Geocode
if ($this->aAddressRankList) { if ($this->aAddressRankList) {
$sSQL .= " OR placex.rank_address in (".join(',', $this->aAddressRankList).")"; $sSQL .= " OR placex.rank_address in (".join(',', $this->aAddressRankList).")";
} }
$sSQL .= " ) "; $sSQL .= " ) UNION ";
$sSQL .= " SELECT place_id FROM location_postcode lp ".$sWherePlaceId;
$sSQL .= " AND (lp.rank_address between $this->iMinAddressRank and $this->iMaxAddressRank ";
if ($this->aAddressRankList) {
$sSQL .= " OR lp.rank_address in (".join(',', $this->aAddressRankList).")";
}
$sSQL .= ") ";
if (CONST_Use_US_Tiger_Data && $this->iMaxAddressRank == 30) { if (CONST_Use_US_Tiger_Data && $this->iMaxAddressRank == 30) {
$sSQL .= "UNION "; $sSQL .= "UNION ";
$sSQL .= " SELECT place_id "; $sSQL .= " SELECT place_id ";
$sSQL .= " FROM location_property_tiger "; $sSQL .= " FROM location_property_tiger ".$sWherePlaceId;
$sSQL .= " WHERE place_id in (".join(',', array_keys($aResultPlaceIDs)).") ";
} }
if ($this->iMaxAddressRank == 30) { if ($this->iMaxAddressRank == 30) {
$sSQL .= "UNION "; $sSQL .= "UNION ";
$sSQL .= " SELECT place_id "; $sSQL .= " SELECT place_id ";
$sSQL .= " FROM location_property_osmline "; $sSQL .= " FROM location_property_osmline ".$sWherePlaceId;
$sSQL .= " WHERE place_id in (".join(',', array_keys($aResultPlaceIDs)).")";
} }
if (CONST_Debug) var_dump($sSQL); if (CONST_Debug) var_dump($sSQL);
$aFilteredPlaceIDs = chksql($this->oDB->getCol($sSQL)); $aFilteredPlaceIDs = chksql($this->oDB->getCol($sSQL));

View File

@@ -25,3 +25,11 @@ Feature: Searches with postcodes
Then result addresses contain Then result addresses contain
| country_code | | country_code |
| li | | li |
Scenario: Postcode search with structured query
When sending json search query "" with address
| postalcode | country |
| 9490 | li |
Then result addresses contain
| country_code | postcode |
| li | 9490 |