]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib/TokenList.php
Merge pull request #1305 from mtmail/travis-ci-ubuntu-16
[nominatim.git] / lib / TokenList.php
index 1dcaa7f5091df7d4fa9e3763c89ddfb2442635f2..a5b3c2d28710214ec21b7b0a2c2b0c248ca84746 100644 (file)
@@ -12,17 +12,57 @@ require_once(CONST_BasePath.'/lib/SpecialSearchOperator.php');
 /**
  * Saves information about the tokens that appear in a search query.
  *
+ * Tokens are sorted by their normalized form, the token word. There are different
+ * kinds of tokens, represented by different Token* classes. Note that
+ * tokens do not have a common base class. All tokens need to have a field
+ * with the word id that points to an entry in the `word` database table
+ * but otherwise the information saved about a token can be very different.
+ *
+ * There are two different kinds of token words: full words and partial terms.
+ *
+ * Full words start with a space. They represent a complete name of a place.
+ * All special tokens are normally full words.
+ *
+ * Partial terms have no space at the beginning. They may represent a part of
+ * a name of a place (e.g. in the name 'World Trade Center' a partial term
+ * would be 'Trade' or 'Trade Center'). They are only used in TokenWord.
  */
 class TokenList
 {
     // List of list of tokens indexed by their word_token.
     private $aTokens = array();
 
+
+    /**
+     * Return total number of tokens.
+     *
+     * @return Integer
+     */
+    public function count()
+    {
+        return count($this->aTokens);
+    }
+
+    /**
+     * Check if there are tokens for the given token word.
+     *
+     * @param string $sWord Token word to look for.
+     *
+     * @return bool True if there is one or more token for the token word.
+     */
     public function contains($sWord)
     {
         return isset($this->aTokens[$sWord]);
     }
 
+    /**
+     * Get the list of tokens for the given token word.
+     *
+     * @param string $sWord Token word to look for.
+     *
+     * @return object[] Array of tokens for the given token word or an
+     *                  empty array if no tokens could be found.
+     */
     public function get($sWord)
     {
         return isset($this->aTokens[$sWord]) ? $this->aTokens[$sWord] : array();
@@ -85,7 +125,7 @@ class TokenList
                         $iId,
                         $aWord['class'],
                         $aWord['type'],
-                        $aWord['operator'] ? Operator::NONE : Operator::NEAR
+                        $aWord['operator'] ? Operator::NEAR : Operator::NONE
                     );
                 }
             } elseif ($aWord['country_code']) {
@@ -98,7 +138,7 @@ class TokenList
             } else {
                 $oToken = new Token\Word(
                     $iId,
-                    $aWord['word'][0] != ' ',
+                    $aWord['word_token'][0] != ' ',
                     (int) $aWord['count']
                 );
             }