cache autocomplete requests in MySQL
authorx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Sun, 1 Apr 2007 22:50:51 +0000 (22:50 +0000)
committerx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Sun, 1 Apr 2007 22:50:51 +0000 (22:50 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1651 839d8a87-29fc-0310-9880-83ba4fa771e5

modules/search.php
upgrade/0.9.14/08_autocomplete.sql [new file with mode: 0644]

index dfae635..2f281f5 100644 (file)
@@ -261,8 +261,17 @@ class SearchModule extends PLModule
         //   result2|nb2
         //   ...
         header('Content-Type: text/plain; charset="UTF-8"');
-        $q = $_REQUEST['q'];
+        $q = preg_replace('/\*+$/','',$_REQUEST['q']);
         if (!$q) exit();
+
+                               // try to look in cached results        
+        $cache = XDB::query('SELECT result FROM search_autocomplete WHERE name = {?} AND query = {?} AND generated > NOW() - INTERVAL 1 DAY',
+                       $type, $q);
+        if ($res = $cache->fetchOneCell()) {
+                       echo $res;
+                       die();
+        }
+        
         // default search
         $unique = 'user_id';
         $db = 'auth_user_md5';
@@ -328,15 +337,18 @@ class SearchModule extends PLModule
                                                LIMIT 11',
                                                ($contains?'%':'').str_replace('*','%',$q).'%');
         $nbResults = 0;
+        $res = "";
         while ($result = $list->next()) {
             $nbResults++;
             if ($nbResults == 11) {
-                echo '...|1'."\n";
+                $res .= '...|1'."\n";
             } else {
-                echo $result['field'].'|'.$result['nb'].(isset($result['id'])?('|'.$result['id']):'')."\n";
+                $res .= $result['field'].'|'.$result['nb'].(isset($result['id'])?('|'.$result['id']):'')."\n";
             }
         }
-
+        XDB::query('REPLACE INTO search_autocomplete VALUES ({?}, {?}, {?}, NOW())',
+                       $type, $q, $res);
+        echo $res;
         exit();
     }
     
diff --git a/upgrade/0.9.14/08_autocomplete.sql b/upgrade/0.9.14/08_autocomplete.sql
new file mode 100644 (file)
index 0000000..b7a030e
--- /dev/null
@@ -0,0 +1,7 @@
+CREATE TABLE `search_autocomplete` (
+      `name` varchar(20) NOT NULL,
+      `query` varchar(100) NOT NULL,
+      `result` text NOT NULL,
+      `generated` datetime NOT NULL,
+      PRIMARY KEY  (`name`,`query`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;