take Tiger housenumbers into account when ranking street results

Queries with a housenumber need to rank streets higher that
have the requested housenumber attached. We already do that for
ordinary housenumber objects and for interpolations. This
adds support for Tiger housenumbers as well.

Fixes #2501.
This commit is contained in:
Sarah Hoffmann
2021-11-23 20:04:50 +01:00
parent 9628df3031
commit 345637290b

View File

@@ -591,8 +591,7 @@ class SearchDescription
$sChildHnr .= ' AND housenumber ~* E'.$sHouseNumberRegex;
// Interpolations on streets and places.
if (preg_match('/^[0-9]+$/', $this->sHouseNumber)) {
$sIpolHnr = 'SELECT * FROM location_property_osmline ';
$sIpolHnr .= 'WHERE parent_place_id = search_name.place_id ';
$sIpolHnr = 'WHERE parent_place_id = search_name.place_id ';
$sIpolHnr .= ' AND startnumber is not NULL';
$sIpolHnr .= ' AND '.$this->sHouseNumber.'>=startnumber ';
$sIpolHnr .= ' AND '.$this->sHouseNumber.'<=endnumber ';
@@ -606,7 +605,11 @@ class SearchDescription
$sSql = '(CASE WHEN address_rank = 30 THEN EXISTS('.$sSelfHnr.') ';
$sSql .= ' ELSE EXISTS('.$sChildHnr.') ';
if ($sIpolHnr) {
$sSql .= 'OR EXISTS('.$sIpolHnr.') ';
$sSql .= 'OR EXISTS(SELECT * FROM location_property_osmline '.$sIpolHnr.') ';
if (CONST_Use_US_Tiger_Data) {
$sSql .= "OR (country_code = 'us' AND ";
$sSql .= ' EXISTS(SELECT * FROM location_property_tiger '.$sIpolHnr.')) ';
}
}
$sSql .= 'END) DESC';