]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
PostgreSQL: support for full text searching (notice and people)
authorCiaranG <ciaran@ciarang.com>
Sun, 14 Sep 2008 20:17:44 +0000 (16:17 -0400)
committerCiaranG <ciaran@ciarang.com>
Sun, 14 Sep 2008 20:17:44 +0000 (16:17 -0400)
darcs-hash:20080914201744-f6e2c-71b2a3aec4c0b91557465323d79645e7eab2bfd1.gz

actions/noticesearch.php
actions/noticesearchrss.php
actions/peoplesearch.php
db/laconica_pg.sql

index c257ecec56ebf23b4b9dda4c357824a2f192790a..7022109e6658465fb4671f221451cb6706b9dac3 100644 (file)
@@ -40,7 +40,12 @@ class NoticesearchAction extends SearchAction {
 
                # lcase it for comparison
                $q = strtolower($q);
-               $notice->whereAdd('MATCH(content) against (\''.addslashes($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).'\')');
+               }
 
                # Ask for an extra to see if there's more.
 
index c9d08ce8e77c1d2ba9af5f09b49a65c7b69a6252..f598d833eb8fd35981616d5d69679ff201629092 100644 (file)
@@ -39,7 +39,11 @@ class NoticesearchrssAction extends Rss10Action {
                # lcase it for comparison
                $q = strtolower($q);
 
-               $notice->whereAdd('MATCH(content) against (\''.addslashes($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).'\')');
+               }
                $notice->orderBy('created DESC, notice.id DESC');
 
                # Ask for an extra to see if there's more.
@@ -70,4 +74,4 @@ class NoticesearchrssAction extends Rss10Action {
        function get_image() {
                return NULL;
        }
-}
\ No newline at end of file
+}
index adacc095440c8f0e2d23c255350ecf14de21604b..4e0ec3f0c41d3db8baf61156908096e600222a4e 100644 (file)
@@ -39,8 +39,13 @@ class PeoplesearchAction extends SearchAction {
 
                # lcase it for comparison
                $q = strtolower($q);
-               $profile->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
+
+               if(common_config('db','type')=='mysql') {
+                       $profile->whereAdd('MATCH(nickname, fullname, location, bio, homepage) ' .
                                                   'against (\''.addslashes($q).'\')');
+               } else {
+                       $profile->whereAdd('textsearch @@ plainto_tsquery(\''.addslashes($q).'\')');
+               }
 
                # Ask for an extra to see if there's more.
 
index 315112b9350accd1a28da8d8db29001208eaaf5c..ff11219d5db4a67c508d5844e3c73d3df5c465f8 100644 (file)
@@ -9,14 +9,12 @@ create table profile (
     bio varchar(140) /* comment 'descriptive biography' */,\r
     location varchar(255) /* comment 'physical location' */,\r
     created timestamp not null /* comment 'date this record was created' */,\r
-    modified timestamp /* comment 'date this record was modified' */\r
+    modified timestamp /* comment 'date this record was modified' */,\r
 \r
-/*    FULLTEXT(nickname, fullname, location, bio, homepage) */\r
+    textsearch tsvector\r
 );\r
 create index profile_nickname_idx on profile using btree(nickname);\r
 \r
-\r
-\r
 create table avatar (\r
     profile_id integer not null /* comment 'foreign key to profile table' */ references profile (id) ,\r
     original integer default 0 /* comment 'uploaded by user or generated?' */,\r
@@ -289,3 +287,11 @@ create table foreign_subscription (
 );\r
 create index foreign_subscription_subscriber_idx on foreign_subscription using btree(subscriber);\r
 create index foreign_subscription_subscribed_idx on foreign_subscription using btree(subscribed);\r
+\r
+/* Textsearch stuff */\r
+\r
+create index textsearch_idx on profile using gist(textsearch);\r
+create index noticecontent_idx on notice using gist(to_tsvector('english',content));\r
+create trigger textsearchupdate before insert or update on profile for each row\r
+execute procedure tsvector_update_trigger(textsearch, 'pg_catalog.english', nickname, fullname, location, bio, homepage);\r
+\r