public static function getSuggestion($params)
 {
     try {
         $db = Lms_Db::get('main');
         $query = $params['query'];
         $cell = $db->selectCell('SELECT `result` FROM `suggestion_cache` WHERE `query` LIKE ?', $query);
         if ($cell) {
             $suggestion = Zend_Json::decode($cell);
         } else {
             $suggestion = Lms_Application::getSuggestion($query);
         }
         if ($suggestion['films']) {
             $sql = "SELECT `ID` as film_id , " . "    Name as name, " . "    OriginalName as `international_name`, " . "    Year as year, " . "    CONCAT(BigPosters, '\n', Poster) as `covers` " . "FROM `films`" . "WHERE ID IN(?a) " . "ORDER BY rank DESC";
             $films = $db->select($sql, $suggestion['films']);
             foreach ($films as &$film) {
                 $film["international_name"] = htmlentities($film["international_name"], ENT_NOQUOTES, 'cp1252');
                 $covers = array_values(array_filter(preg_split("/(\r\n|\r|\n)/", $film["covers"])));
                 $film["cover"] = array_shift($covers);
                 if ($film["cover"]) {
                     $film["cover"] = Lms_Application::thumbnail($film["cover"], $width = 40, $height = 0, $defer = true);
                 }
                 unset($film["covers"]);
             }
         } else {
             $films = array();
         }
         if ($suggestion['persones']) {
             $sql = "SELECT ID as person_id , " . "    RusName as `name`, " . "    OriginalName as `international_name`, " . "    Description as `description`, " . "    IF(LENGTH(Images)>LENGTH(Photos), Images, Photos) as photos " . "FROM persones " . "WHERE ID IN(?a) " . "ORDER BY rank DESC";
             $persones = $db->select($sql, $suggestion['persones']);
             foreach ($persones as &$person) {
                 $photos = array_values(array_filter(preg_split("/(\r\n|\r|\n)/", $person["photos"])));
                 $person["photo"] = array_shift($photos);
                 if ($person["photo"]) {
                     $person["photo"] = Lms_Application::thumbnail($person["photo"], $width = 40, $height = 0, $defer = true);
                 }
                 unset($person["photos"]);
             }
         } else {
             $persones = array();
         }
         $result['query'] = $query;
         $result['films'] = $films;
         $result['persones'] = $persones;
         return new Lms_Api_Response(200, null, $result);
     } catch (Exception $e) {
         return new Lms_Api_Response(500, $e->getMessage());
     }
 }
#!/usr/local/bin/php -q
<?php 
require_once dirname(__FILE__) . '/include/init.php';
$db = Lms_Db::get('main');
$db->query('TRUNCATE `suggestion_cache`');
echo "\nIndexing...";
$n = 1;
$limit = 100;
while (true) {
    $rows = $db->select('SELECT (LEFT(`word`,?d)) as `query`, COUNT(*) as c FROM `suggestion` WHERE LENGTH(`word`)>=?d GROUP BY (LEFT(`word`, ?d)) HAVING c>?d', $n, $n, $n, $limit);
    if (!count($rows)) {
        break;
    }
    echo "\n{$n}: " . count($rows) . " ({$rows[0]['query']}) ";
    foreach ($rows as $num => $row) {
        if (!($num % 10)) {
            echo '.';
        }
        $suggestion = Lms_Application::getSuggestion($row['query']);
        $db->query('INSERT IGNORE INTO `suggestion_cache` SET `query`=? ,`result`=?', $row['query'], Zend_Json::encode($suggestion));
    }
    echo ' OK';
    $n += 1;
}
echo "\nDone\n";
require_once dirname(__FILE__) . '/include/end.php';