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';