]> git.openstreetmap.org Git - nominatim.git/blobdiff - website/search.php
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / website / search.php
index a92ac30ad57c3ad82eae0031fbe0df71b7259807..0d398cc43db216255a251bc20eacb59efa9fed04 100755 (executable)
                                                                                        {
                                                                                                $aSearch['sCountryCode'] = strtolower($aSearchTerm['country_code']);
                                                                                                // Country is almost always at the end of the string - increase score for finding it anywhere else (optimisation)
-                                                                                               if ($iToken+1 != sizeof($aWordset) || $iPhrase+1 != sizeof($aPhrases)) $aSearch['iSearchRank'] += 5;
+                                                                                               // If reverse order is enabled, it may appear at the beginning as well.
+                                                                                               if (($iToken+1 != sizeof($aWordset) || $iPhrase+1 != sizeof($aPhrases)) &&
+                                                                                                               (!$bReverseInPlan || $iToken > 0 || $iPhrase > 0))
+                                                                                               {
+                                                                                                       $aSearch['iSearchRank'] += 5;
+                                                                                               }
                                                                                                if ($aSearch['iSearchRank'] < $iMaxRank) $aNewWordsetSearches[] = $aSearch;
                                                                                        }
                                                                                }
                                                                if ($sCountryCodesSQL) $sSQL .= " join placex using (place_id)";
                                                                $sSQL .= " where st_contains($sViewboxSmallSQL, ct.centroid)";
                                                                if ($sCountryCodesSQL) $sSQL .= " and country_code in ($sCountryCodesSQL)";                                                             
+                                                               if (sizeof($aExcludePlaceIDs))
+                                                               {
+                                                                       $sSQL .= " and place_id not in (".join(',',$aExcludePlaceIDs).")";
+                                                               }
                                                                if ($sViewboxCentreSQL) $sSQL .= " order by st_distance($sViewboxCentreSQL, ct.centroid) asc";
                                                                $sSQL .= " limit $iLimit";
                                                                if (CONST_Debug) var_dump($sSQL);
                                                                $aPlaceIDs = $oDB->getCol($sSQL);
 
-                                                               if (!sizeof($aPlaceIDs))
+                                                               // If excluded place IDs are given, it is fair to assume that
+                                                               // there have been results in the small box, so no further
+                                                               // expansion in that case.
+                                                               if (!sizeof($aPlaceIDs) && !sizeof($aExcludePlaceIDs))
                                                                {
                                                                        $sSQL = "select place_id from place_classtype_".$aSearch['sClass']."_".$aSearch['sType']." ct";
                                                                        if ($sCountryCodesSQL) $sSQL .= " join placex using (place_id)";