]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 22 Oct 2020 11:43:50 +0000 (13:43 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 22 Oct 2020 11:43:50 +0000 (13:43 +0200)
1  2 
lib/Geocode.php

diff --combined lib/Geocode.php
index 7ab53d97812a5cbf640672e93f0e963f8c6f10eb,b07d1adebe587d12f01a738cdf8d39ad1ffd2ddd..8e71d761b367ce0d3e7722e6bf8adfd7f879b88b
@@@ -18,7 -18,7 +18,7 @@@ class Geocod
      protected $aLangPrefOrder = array();
  
      protected $aExcludePlaceIDs = array();
 -    protected $bReverseInPlan = false;
 +    protected $bReverseInPlan = true;
  
      protected $iLimit = 20;
      protected $iFinalLimit = 10;
                      $aResult['lon'],
                      $aResult['lat']
                  );
-                 // Adjust importance for the number of exact string matches in the result
-                 $iCountWords = 0;
-                 $sAddress = $aResult['langaddress'];
-                 foreach ($aRecheckWords as $i => $sWord) {
-                     if (stripos($sAddress, $sWord)!==false) {
-                         $iCountWords++;
-                         if (preg_match('/(^|,)\s*'.preg_quote($sWord, '/').'\s*(,|$)/', $sAddress)) $iCountWords += 0.1;
-                     }
-                 }
-                 $aResult['importance'] = $aResult['importance'] + ($iCountWords*0.1); // 0.1 is a completely arbitrary number but something in the range 0.1 to 0.5 would seem right
  
                  // secondary ordering (for results with same importance (the smaller the better):
                  // - approximate importance of address parts
-                 $aResult['foundorder'] = -$aResult['addressimportance']/10;
+                 if (isset($aResult['addressimportance']) && $aResult['addressimportance']) {
+                     $aResult['foundorder'] = -$aResult['addressimportance']/10;
+                 } else {
+                     $aResult['foundorder'] = -$aResult['importance'];
+                 }
                  // - number of exact matches from the query
                  $aResult['foundorder'] -= $aResults[$aResult['place_id']]->iExactMatches;
                  // - importance of the class/type
                  } else {
                      $aResult['foundorder'] += 0.01;
                  }
+                 // Adjust importance for the number of exact string matches in the result
+                 $iCountWords = 0;
+                 $sAddress = $aResult['langaddress'];
+                 foreach ($aRecheckWords as $i => $sWord) {
+                     if (stripos($sAddress, $sWord)!==false) {
+                         $iCountWords++;
+                         if (preg_match('/(^|,)\s*'.preg_quote($sWord, '/').'\s*(,|$)/', $sAddress)) $iCountWords += 0.1;
+                     }
+                 }
+                 // 0.1 is a completely arbitrary number but something in the range 0.1 to 0.5 would seem right
+                 $aResult['importance'] = $aResult['importance'] + ($iCountWords*0.1);
              }
              $aSearchResults[$iIdx] = $aResult;
          }