]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Add like for search
authorEvan Prodromou <evan@controlyourself.ca>
Mon, 22 Jun 2009 04:50:35 +0000 (21:50 -0700)
committerEvan Prodromou <evan@controlyourself.ca>
Mon, 22 Jun 2009 04:50:35 +0000 (21:50 -0700)
README
classes/Memcached_DataObject.php
lib/common.php
lib/search_engines.php

diff --git a/README b/README
index 5aa7270eece7c2bf6ea98823c223e9c62b4e6668..0c500acb863dae2677384bf391f324e190dea79e 100644 (file)
--- a/README
+++ b/README
@@ -1247,7 +1247,6 @@ Options for group functionality.
 maxaliases: maximum number of aliases a group can have. Default 3. Set
             to 0 or less to prevent aliases in a group.
 
-
 oohembed
 --------
 
@@ -1255,6 +1254,18 @@ oEmbed endpoint for multimedia attachments (links in posts).
 
 endpoint: oohembed endpoint using http://oohembed.com/ software.
 
+search
+------
+
+Some stuff for search.
+
+type: type of search. Ignored if PostgreSQL or Sphinx are enabled. Can either
+      be 'fulltext' (default) or 'like'. The former is faster and more efficient
+      but requires the lame old MyISAM engine for MySQL. The latter
+      will work with InnoDB but could be miserably slow on large
+      systems. We'll probably add another type sometime in the future,
+      with our own indexing system (maybe like MediaWiki's).
+
 Troubleshooting
 ===============
 
index 2d5a73554c7210fda91d50c338cc8ac0db322346..f7cbb9d5b6c375b50f9c7dbc46b3a8eb2496e80b 100644 (file)
@@ -193,7 +193,14 @@ class Memcached_DataObject extends DB_DataObject
                 // unable to connect to sphinx' search daemon
                 if (!$connected) {
                     if ('mysql' === common_config('db', 'type')) {
-                        $search_engine = new MySQLSearch($this, $table);
+                        $type = common_config('search', 'type');
+                        if ($type == 'like') {
+                            $search_engine = new MySQLLikeSearch($this, $table);
+                        } else if ($type == 'fulltext') {
+                            $search_engine = new MySQLSearch($this, $table);
+                        } else {
+                            throw new ServerException('Unknown search type: ' . $type);
+                        }
                     } else {
                         $search_engine = new PGSearch($this, $table);
                     }
index 361759d0a233a0168563870567ad6bf26001e429..14f5c7a7f1262a941c56693c5f8afb60c6fee71f 100644 (file)
@@ -228,7 +228,9 @@ $config =
         ),
         'group' =>
         array('maxaliases' => 3),
-        'oohembed' => array('endpoint' => 'http://oohembed.com/oohembed/')
+        'oohembed' => array('endpoint' => 'http://oohembed.com/oohembed/'),
+        'search' =>
+        array('type' => 'fulltext'),
         );
 
 $config['db'] = &PEAR::getStaticProperty('DB_DataObject','options');
index c98e8ed875b0017335a5ca07c4f0055133fbf334..5c84d7c6b287e87b3ee29569c9c2fddcededb6fa 100644 (file)
@@ -131,6 +131,28 @@ class MySQLSearch extends SearchEngine
     }
 }
 
+class MySQLLikeSearch extends SearchEngine
+{
+    function query($q)
+    {
+        if ('identica_people' === $this->table) {
+            $qry = sprintf('(nickname LIKE "%%%1$s%%" OR '.
+                           ' fullname LIKE "%%%1$s%%" OR '.
+                           ' location LIKE "%%%1$s%%" OR '.
+                           ' bio      LIKE "%%%1$s%%" OR '.
+                           ' homepage LIKE "%%%1$s%%")', addslashes($q));
+        } else if ('identica_notices' === $this->table) {
+            $qry = sprintf('content LIKE "%%%1$s%%"', addslashes($q));
+        } else {
+            throw new ServerException('Unknown table: ' . $this->table);
+        }
+
+        $this->target->whereAdd($qry);
+
+        return true;
+    }
+}
+
 class PGSearch extends SearchEngine
 {
     function query($q)