]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-php/TokenWord.php
Merge pull request #3020 from lonvia/reverse-api
[nominatim.git] / lib-php / TokenWord.php
index 7c653f8fc7c2cee2db1e3accc0b0930866f4dca7..a7557d38b51c8c97a2cf12baf1c7776cb5bc25c8 100644 (file)
@@ -1,4 +1,12 @@
 <?php
 <?php
+/**
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * This file is part of Nominatim. (https://nominatim.org)
+ *
+ * Copyright (C) 2022 by the Nominatim developer community.
+ * For a full list of authors see the git log.
+ */
 
 namespace Nominatim\Token;
 
 
 namespace Nominatim\Token;
 
@@ -26,6 +34,22 @@ class Word
         return $this->iId;
     }
 
         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.
      *
     /**
      * Derive new searches by adding this token to an existing search.
      *
@@ -37,12 +61,8 @@ class Word
      */
     public function extendSearch($oSearch, $oPosition)
     {
      */
     public function extendSearch($oSearch, $oPosition)
     {
-        if ($oPosition->isPhrase('country')) {
-            return array();
-        }
-
         // Full words can only be a name if they appear at the beginning
         // Full words can only be a name if they appear at the beginning
-        // of the phrase. In structured search the name must forcably in
+        // of the phrase. In structured search the name must forcibly in
         // the first phrase. In unstructured search it may be in a later
         // phrase when the first phrase is a house number.
         if ($oSearch->hasName()
         // the first phrase. In unstructured search it may be in a later
         // phrase when the first phrase is a house number.
         if ($oSearch->hasName()
@@ -58,13 +78,12 @@ class Word
             }
         } elseif (!$oSearch->hasName(true)) {
             $oNewSearch = $oSearch->clone(1);
             }
         } elseif (!$oSearch->hasName(true)) {
             $oNewSearch = $oSearch->clone(1);
-            $oNewSearch->addNameToken($this->iId);
-            if (CONST_Search_NameOnlySearchFrequencyThreshold
+            $oNewSearch->addNameToken(
+                $this->iId,
+                CONST_Search_NameOnlySearchFrequencyThreshold
                 && $this->iSearchNameCount
                           < CONST_Search_NameOnlySearchFrequencyThreshold
                 && $this->iSearchNameCount
                           < CONST_Search_NameOnlySearchFrequencyThreshold
-            ) {
-                $oNewSearch->markRareName();
-            }
+            );
 
             return array($oNewSearch);
         }
 
             return array($oNewSearch);
         }