From 3632a76773dbfc31cf6f99ad831bf13f793871ae Mon Sep 17 00:00:00 2001 From: CiaranG Date: Sun, 14 Sep 2008 16:17:44 -0400 Subject: [PATCH] PostgreSQL: support for full text searching (notice and people) darcs-hash:20080914201744-f6e2c-71b2a3aec4c0b91557465323d79645e7eab2bfd1.gz --- actions/noticesearch.php | 7 ++++++- actions/noticesearchrss.php | 8 ++++++-- actions/peoplesearch.php | 7 ++++++- db/laconica_pg.sql | 14 ++++++++++---- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/actions/noticesearch.php b/actions/noticesearch.php index c257ecec56..7022109e66 100644 --- a/actions/noticesearch.php +++ b/actions/noticesearch.php @@ -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. diff --git a/actions/noticesearchrss.php b/actions/noticesearchrss.php index c9d08ce8e7..f598d833eb 100644 --- a/actions/noticesearchrss.php +++ b/actions/noticesearchrss.php @@ -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 +} diff --git a/actions/peoplesearch.php b/actions/peoplesearch.php index adacc09544..4e0ec3f0c4 100644 --- a/actions/peoplesearch.php +++ b/actions/peoplesearch.php @@ -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. diff --git a/db/laconica_pg.sql b/db/laconica_pg.sql index 315112b935..ff11219d5d 100644 --- a/db/laconica_pg.sql +++ b/db/laconica_pg.sql @@ -9,14 +9,12 @@ create table profile ( bio varchar(140) /* comment 'descriptive biography' */, location varchar(255) /* comment 'physical location' */, created timestamp not null /* comment 'date this record was created' */, - modified timestamp /* comment 'date this record was modified' */ + modified timestamp /* comment 'date this record was modified' */, -/* FULLTEXT(nickname, fullname, location, bio, homepage) */ + textsearch tsvector ); create index profile_nickname_idx on profile using btree(nickname); - - create table avatar ( profile_id integer not null /* comment 'foreign key to profile table' */ references profile (id) , original integer default 0 /* comment 'uploaded by user or generated?' */, @@ -289,3 +287,11 @@ create table foreign_subscription ( ); create index foreign_subscription_subscriber_idx on foreign_subscription using btree(subscriber); create index foreign_subscription_subscribed_idx on foreign_subscription using btree(subscribed); + +/* Textsearch stuff */ + +create index textsearch_idx on profile using gist(textsearch); +create index noticecontent_idx on notice using gist(to_tsvector('english',content)); +create trigger textsearchupdate before insert or update on profile for each row +execute procedure tsvector_update_trigger(textsearch, 'pg_catalog.english', nickname, fullname, location, bio, homepage); +