]> git.openstreetmap.org Git - nominatim.git/commitdiff
factor out check if a token fits current search
authorSarah Hoffmann <lonvia@denofr.de>
Sat, 17 Jul 2021 20:01:35 +0000 (22:01 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sat, 17 Jul 2021 20:01:35 +0000 (22:01 +0200)
Saves allocating an empty array.

lib-php/Geocode.php
lib-php/TokenCountry.php
lib-php/TokenHousenumber.php
lib-php/TokenPartial.php
lib-php/TokenPostcode.php
lib-php/TokenSpecialTerm.php
lib-php/TokenWord.php

index 734f40693a188036e35e3e99a8ee9b2788501ce9..82892eae6e78bd176bd4724be34de111374474a7 100644 (file)
@@ -362,14 +362,16 @@ class Geocode
 
                     foreach ($aWordsetSearches as $oCurrentSearch) {
                         foreach ($oValidTokens->get($sToken) as $oSearchTerm) {
-                            $aNewSearches = $oSearchTerm->extendSearch(
-                                $oCurrentSearch,
-                                $oPosition
-                            );
-
-                            foreach ($aNewSearches as $oSearch) {
-                                if ($oSearch->getRank() < $this->iMaxRank) {
-                                    $aNewWordsetSearches[] = $oSearch;
+                            if ($oSearchTerm->isExtendable($oCurrentSearch, $oPosition)) {
+                                $aNewSearches = $oSearchTerm->extendSearch(
+                                    $oCurrentSearch,
+                                    $oPosition
+                                );
+
+                                foreach ($aNewSearches as $oSearch) {
+                                    if ($oSearch->getRank() < $this->iMaxRank) {
+                                        $aNewWordsetSearches[] = $oSearch;
+                                    }
                                 }
                             }
                         }
index 917ed9d25867d55834003aaf3e53720155ec0ed7..c9b7b6af1a93b1e778f9721397dec8760809c005 100644 (file)
@@ -23,6 +23,22 @@ class Country
         return $this->iId;
     }
 
+    /**
+     * Check if the token can be added to the given search.
+     * Derive new searches by adding this token to an existing search.
+     *
+     * @param object  $oSearch      Partial search description derived so far.
+     * @param object  $oPosition    Description of the token position within
+                                    the query.
+     *
+     * @return True if the token is compatible with the search configuration
+     *         given the position.
+     */
+    public function isExtendable($oSearch, $oPosition)
+    {
+        return !$oSearch->hasCountry() && $oPosition->maybePhrase('country');
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -34,10 +50,6 @@ class Country
      */
     public function extendSearch($oSearch, $oPosition)
     {
-        if ($oSearch->hasCountry() || !$oPosition->maybePhrase('country')) {
-            return array();
-        }
-
         $oNewSearch = $oSearch->clone($oPosition->isLastToken() ? 1 : 6);
         $oNewSearch->setCountry($this->sCountryCode);
 
index 0cc67a1212d17fc8bbd5a6251f5b86827fc05efe..cd60d3ca5620b7851a36736971adf753c6db49f9 100644 (file)
@@ -23,6 +23,24 @@ class HouseNumber
         return $this->iId;
     }
 
+    /**
+     * Check if the token can be added to the given search.
+     * Derive new searches by adding this token to an existing search.
+     *
+     * @param object  $oSearch      Partial search description derived so far.
+     * @param object  $oPosition    Description of the token position within
+                                    the query.
+     *
+     * @return True if the token is compatible with the search configuration
+     *         given the position.
+     */
+    public function isExtendable($oSearch, $oPosition)
+    {
+        return !$oSearch->hasHousenumber()
+               && !$oSearch->hasOperator(\Nominatim\Operator::POSTCODE)
+               && $oPosition->maybePhrase('street');
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -36,13 +54,6 @@ class HouseNumber
     {
         $aNewSearches = array();
 
-        if ($oSearch->hasHousenumber()
-            || $oSearch->hasOperator(\Nominatim\Operator::POSTCODE)
-            || !$oPosition->maybePhrase('street')
-        ) {
-            return $aNewSearches;
-        }
-
         // sanity check: if the housenumber is not mainly made
         // up of numbers, add a penalty
         $iSearchCost = 1;
index e52161cc0168953f30fed95296cef5c196c64bcb..131bb2a3b48a52484df6817e1e39deeb8d3db90b 100644 (file)
@@ -26,6 +26,22 @@ class Partial
         return $this->iId;
     }
 
+    /**
+     * Check if the token can be added to the given search.
+     * Derive new searches by adding this token to an existing search.
+     *
+     * @param object  $oSearch      Partial search description derived so far.
+     * @param object  $oPosition    Description of the token position within
+                                    the query.
+     *
+     * @return True if the token is compatible with the search configuration
+     *         given the position.
+     */
+    public function isExtendable($oSearch, $oPosition)
+    {
+        return !$oPosition->isPhrase('country');
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -37,10 +53,6 @@ class Partial
      */
     public function extendSearch($oSearch, $oPosition)
     {
-        if ($oPosition->isPhrase('country')) {
-            return array();
-        }
-
         $aNewSearches = array();
 
         // Partial token in Address.
index 563fe7faa36b9f94ad3d83b81db5a973d26cae6d..c0b42fad5ae3fab4b4360f153806e4365f20b357 100644 (file)
@@ -26,6 +26,22 @@ class Postcode
         return $this->iId;
     }
 
+    /**
+     * Check if the token can be added to the given search.
+     * Derive new searches by adding this token to an existing search.
+     *
+     * @param object  $oSearch      Partial search description derived so far.
+     * @param object  $oPosition    Description of the token position within
+                                    the query.
+     *
+     * @return True if the token is compatible with the search configuration
+     *         given the position.
+     */
+    public function isExtendable($oSearch, $oPosition)
+    {
+        return !$oSearch->hasPostcode() && $oPosition->maybePhrase('postalcode');
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -39,10 +55,6 @@ class Postcode
     {
         $aNewSearches = array();
 
-        if ($oSearch->hasPostcode() || !$oPosition->maybePhrase('postalcode')) {
-            return $aNewSearches;
-        }
-
         // If we have structured search or this is the first term,
         // make the postcode the primary search element.
         if ($oSearch->hasOperator(\Nominatim\Operator::NONE) && $oPosition->isFirstToken()) {
index 89dfa02619447f78106eb16eb2139e8557c8ab4b..355dbb91aa32b6ad73af02a142e763559fe89583 100644 (file)
@@ -31,6 +31,22 @@ class SpecialTerm
         return $this->iId;
     }
 
+    /**
+     * Check if the token can be added to the given search.
+     * Derive new searches by adding this token to an existing search.
+     *
+     * @param object  $oSearch      Partial search description derived so far.
+     * @param object  $oPosition    Description of the token position within
+                                    the query.
+     *
+     * @return True if the token is compatible with the search configuration
+     *         given the position.
+     */
+    public function isExtendable($oSearch, $oPosition)
+    {
+        return !$oSearch->hasOperator() && $oPosition->isPhrase('');
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -42,10 +58,6 @@ class SpecialTerm
      */
     public function extendSearch($oSearch, $oPosition)
     {
-        if ($oSearch->hasOperator() || !$oPosition->isPhrase('')) {
-            return array();
-        }
-
         $iSearchCost = 2;
 
         $iOp = $this->iOperator;
index 7c653f8fc7c2cee2db1e3accc0b0930866f4dca7..c9a439155b1ca33b72ba9c556ad6773cca238faf 100644 (file)
@@ -26,6 +26,22 @@ class Word
         return $this->iId;
     }
 
+    /**
+     * Check if the token can be added to the given search.
+     * Derive new searches by adding this token to an existing search.
+     *
+     * @param object  $oSearch      Partial search description derived so far.
+     * @param object  $oPosition    Description of the token position within
+                                    the query.
+     *
+     * @return True if the token is compatible with the search configuration
+     *         given the position.
+     */
+    public function isExtendable($oSearch, $oPosition)
+    {
+        return !$oPosition->isPhrase('country');
+    }
+
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -37,10 +53,6 @@ class Word
      */
     public function extendSearch($oSearch, $oPosition)
     {
-        if ($oPosition->isPhrase('country')) {
-            return array();
-        }
-
         // Full words can only be a name if they appear at the beginning
         // of the phrase. In structured search the name must forcably in
         // the first phrase. In unstructured search it may be in a later