]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
sphinx search for notices
authormillette <millette@controlyourself.ca>
Thu, 20 Nov 2008 21:50:41 +0000 (16:50 -0500)
committermillette <millette@controlyourself.ca>
Thu, 20 Nov 2008 21:50:41 +0000 (16:50 -0500)
darcs-hash:20081120215041-099f7-db396a60755d551099122b58634b7550d5606d88.gz

actions/noticesearch.php
actions/peoplesearch.php
classes/Memcached_DataObject.php
classes/Profile.php
classes/SearchEngines.php

index bc052d512f5b1a0f6bea529d3be9ef5a5c94ba35..f8dad2a20eecd39f123ae82dc08a9f58d8cfd48e 100644 (file)
@@ -41,15 +41,11 @@ class NoticesearchAction extends SearchAction {
                # lcase it for comparison
                $q = strtolower($q);
 
-               if(common_config('db','type')=='mysql') {
-                       $notice->whereAdd('MATCH(content) against (\''.addslashes($q).'\')');
-               } else {
-                       $notice->whereAdd('to_tsvector(\'english\', content) @@ plainto_tsquery(\''.addslashes($q).'\')');
-               }
+        $search_engine = $notice->getSearchEngine('identica_notices');
+        $search_engine->query($q);
 
                # Ask for an extra to see if there's more.
-
-               $notice->limit((($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1);
+               $search_engine->limit((($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1);
 
                $cnt = $notice->find();
 
index d493c766784ec16df3e3851dc860f54a18a1a9dc..fa54dc9f7cd69f176c2a0e1fc923b7d86d156c5b 100644 (file)
@@ -40,7 +40,7 @@ class PeoplesearchAction extends SearchAction {
                # lcase it for comparison
                $q = strtolower($q);
 
-        $search_engine = $profile->getSearchEngine();
+        $search_engine = $profile->getSearchEngine('identica_people');
 
         $search_engine->query($q);
 
index f8e1b9accc6871495a2197680f24087ac3d42483..e1d58dd70e97b1b20227729524c8721b5c04abc8 100644 (file)
@@ -169,4 +169,19 @@ class Memcached_DataObject extends DB_DataObject
                        return $c->get(Memcached_DataObject::cacheKey($cls, $pkeys, $pvals));
                }
        }
+
+    function getSearchEngine($table) {
+        require_once INSTALLDIR.'/classes/SearchEngines.php';
+        static $search_engine;
+        if (!isset($search_engine)) {
+                if (common_config('sphinx', 'enabled')) {
+                    $search_engine = new SphinxSearch($this, $table);
+                } elseif ('mysql' === common_config('db', 'type')) {
+                    $search_engine = new MySQLSearch($this, $table);
+                } else {
+                    $search_engine = new PGSearch($this, $table);
+                }
+        }
+        return $search_engine;
+    }
 }
index 9de92ec4bc40023b420788035a41b3de628bf4fc..794dc1de93c8857e2f23c92f30930342fb7890c2 100644 (file)
@@ -46,21 +46,6 @@ class Profile extends Memcached_DataObject
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
 
-    function getSearchEngine() {
-        require_once INSTALLDIR.'/classes/SearchEngines.php';
-        static $search_engine;
-        if (!isset($search_engine)) {
-                if (common_config('sphinx', 'enabled')) {
-                    $search_engine = new SphinxSearch($this);
-                } elseif ('mysql' === common_config('db', 'type')) {
-                    $search_engine = new MySQLSearch($this);
-                } else {
-                    $search_engine = new PGSearch($this);
-                }
-        }
-        return $search_engine;
-    }
-
        function getAvatar($width, $height=NULL) {
                if (is_null($height)) {
                        $height = $width;
index e5f4e14ea76c0c9de4de64e572957131bd149741..253e0028be9d91d22ec21e44dfb2347cb06a6cfa 100644 (file)
@@ -21,9 +21,11 @@ if (!defined('LACONICA')) { exit(1); }
 
 class SearchEngine {
     protected $profile;
+    protected $table;
 
-    function __construct($profile) {
+    function __construct($profile, $table) {
         $this->profile = $profile;
+        $this->table = $table;
     }
 
     function query($q) {
@@ -37,8 +39,8 @@ class SearchEngine {
 class SphinxSearch extends SearchEngine {
     private $sphinx;
 
-    function __construct($profile) {
-        parent::__construct($profile);
+    function __construct($profile, $table) {
+        parent::__construct($profile, $table);
         $this->sphinx = new SphinxClient;
         $this->sphinx->setServer(common_config('sphinx', 'server'), common_config('sphinx', 'port'));
     }
@@ -49,7 +51,7 @@ class SphinxSearch extends SearchEngine {
     }
 
     function query($q) {
-        $result = $this->sphinx->query($q);
+        $result = $this->sphinx->query($q, $this->table);
         if (!isset($result['matches'])) return false;
         $id_set = join(', ', array_keys($result['matches']));
         return $this->profile->whereAdd("id in ($id_set)");