]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Somewhat better behaviour with mixed caps in search
authorEvan Prodromou <evan@controlyourself.ca>
Thu, 19 Mar 2009 15:01:58 +0000 (11:01 -0400)
committerEvan Prodromou <evan@controlyourself.ca>
Thu, 19 Mar 2009 15:01:58 +0000 (11:01 -0400)
Deal somewhat better with mixed caps in people and notice search.

actions/groupsearch.php
actions/noticesearch.php
actions/noticesearchrss.php
actions/peoplesearch.php
lib/search_engines.php

index 9b0026db949c60cb7b77a5964792141e6c97e791..109a53ce112704a0ff6f92795fb703e1e1c53b06 100644 (file)
@@ -1,9 +1,4 @@
 <?php
-
-
-//        define('GROUPS_PER_PAGE', 20);
-
-
 /**
  * Group search action class.
  *
@@ -90,15 +85,15 @@ class GroupSearchResults extends GroupList
 {
     var $terms = null;
     var $pattern = null;
-    
+
     function __construct($user_group, $terms, $action)
     {
         parent::__construct($user_group, $terms, $action);
-        $this->terms = array_map('preg_quote', 
+        $this->terms = array_map('preg_quote',
                                  array_map('htmlspecialchars', $terms));
         $this->pattern = '/('.implode('|',$terms).')/i';
     }
-    
+
     function highlight($text)
     {
         return preg_replace($this->pattern, '<strong>\\1</strong>', htmlspecialchars($text));
index 83e59dd9ae1bd404e550df5dda5388648dd7923a..eb4a072defc73de18ba1d9a5425c7d4beed80ded 100644 (file)
@@ -103,7 +103,7 @@ class NoticesearchAction extends SearchAction
     function showResults($q, $page)
     {
         $notice        = new Notice();
-        $q             = strtolower($q);
+
         $search_engine = $notice->getSearchEngine('identica_notices');
         $search_engine->set_sort_mode('chron');
         // Ask for an extra to see if there's more.
index 0f98ed04bb97e26eebadbd30e116653e5398a5b2..ba5276d06e34647df9661b48c4fe4607f346f8b1 100644 (file)
@@ -62,9 +62,6 @@ class NoticesearchrssAction extends Rss10Action
 
         $notice = new Notice();
 
-        # lcase it for comparison
-        $q = strtolower($q);
-
         $search_engine = $notice->getSearchEngine('identica_notices');
         $search_engine->set_sort_mode('chron');
 
index 14177fcf0d48cb996fb77d11f69e65104b9675c4..9e515ade1a9e7b6d21bab32f18e3e9cf44bc5677 100644 (file)
@@ -63,13 +63,13 @@ class PeoplesearchAction extends SearchAction
 
         $profile = new Profile();
 
-        # lcase it for comparison
-        $q = strtolower($q);
+        // lcase it for comparison
+        // $q = strtolower($q);
 
         $search_engine = $profile->getSearchEngine('identica_people');
 
         $search_engine->set_sort_mode('chron');
-        # Ask for an extra to see if there's more.
+        // Ask for an extra to see if there's more.
         $search_engine->limit((($page-1)*PROFILES_PER_PAGE), PROFILES_PER_PAGE + 1);
         if (false === $search_engine->query($q)) {
             $cnt = 0;
index 559107910cef885bccb87a4687b8ab0b2dcae707..7b9dbb6182543e9e14969f7564c336cddc867350 100644 (file)
@@ -74,7 +74,7 @@ class SphinxSearch extends SearchEngine
     {
         //FIXME without LARGEST_POSSIBLE, the most recent results aren't returned
         //      this probably has a large impact on performance
-        $LARGEST_POSSIBLE = 1e6; 
+        $LARGEST_POSSIBLE = 1e6;
 
         if ($rss) {
             $this->sphinx->setLimits($offset, $count, $count, $LARGEST_POSSIBLE);
@@ -109,12 +109,25 @@ class MySQLSearch extends SearchEngine
 {
     function query($q)
     {
-        if ('identica_people' === $this->table)
-            return $this->target->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
-                           'against (\''.addslashes($q).'\')');
-        if ('identica_notices' === $this->table)
-            return $this->target->whereAdd('MATCH(content) ' .
-                           'against (\''.addslashes($q).'\')');
+        if ('identica_people' === $this->table) {
+            $this->target->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
+                                    'AGAINST (\''.addslashes($q).'\' IN BOOLEAN MODE)');
+            if (strtolower($q) != $q) {
+                $this->target->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
+                                        'AGAINST (\''.addslashes(strtolower($q)).'\' IN BOOLEAN MODE)', 'OR');
+            }
+            return true;
+        } else if ('identica_notices' === $this->table) {
+             $this->target->whereAdd('MATCH(content) ' .
+                                     'AGAINST (\''.addslashes($q).'\' IN BOOLEAN MODE)');
+            if (strtolower($q) != $q) {
+                $this->target->whereAdd('MATCH(content) ' .
+                                        'AGAINST (\''.addslashes(strtolower($q)).'\' IN BOOLEAN MODE)', 'OR');
+            }
+            return true;
+        } else {
+            throw new ServerException('Unknown table: ' . $this->table);
+        }
     }
 }
 
@@ -122,10 +135,13 @@ class PGSearch extends SearchEngine
 {
     function query($q)
     {
-        if ('identica_people' === $this->table)
+        if ('identica_people' === $this->table) {
             return $this->target->whereAdd('textsearch @@ plainto_tsquery(\''.addslashes($q).'\')');
-        if ('identica_notices' === $this->table)
+        } else if ('identica_notices' === $this->table) {
             return $this->target->whereAdd('to_tsvector(\'english\', content) @@ plainto_tsquery(\''.addslashes($q).'\')');
+        } else {
+            throw new ServerException('Unknown table: ' . $this->table);
+        }
     }
 }