PostgreSQL: support for full text searching (notice and people)
darcs-hash:20080914201744-f6e2c-71b2a3aec4c0b91557465323d79645e7eab2bfd1.gz
This commit is contained in:
parent
b13233fed4
commit
3632a76773
@ -40,7 +40,12 @@ class NoticesearchAction extends SearchAction {
|
|||||||
|
|
||||||
# lcase it for comparison
|
# lcase it for comparison
|
||||||
$q = strtolower($q);
|
$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.
|
# Ask for an extra to see if there's more.
|
||||||
|
|
||||||
|
@ -39,7 +39,11 @@ class NoticesearchrssAction extends Rss10Action {
|
|||||||
# lcase it for comparison
|
# lcase it for comparison
|
||||||
$q = strtolower($q);
|
$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');
|
$notice->orderBy('created DESC, notice.id DESC');
|
||||||
|
|
||||||
# Ask for an extra to see if there's more.
|
# Ask for an extra to see if there's more.
|
||||||
@ -70,4 +74,4 @@ class NoticesearchrssAction extends Rss10Action {
|
|||||||
function get_image() {
|
function get_image() {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,8 +39,13 @@ class PeoplesearchAction extends SearchAction {
|
|||||||
|
|
||||||
# lcase it for comparison
|
# lcase it for comparison
|
||||||
$q = strtolower($q);
|
$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).'\')');
|
'against (\''.addslashes($q).'\')');
|
||||||
|
} else {
|
||||||
|
$profile->whereAdd('textsearch @@ plainto_tsquery(\''.addslashes($q).'\')');
|
||||||
|
}
|
||||||
|
|
||||||
# Ask for an extra to see if there's more.
|
# Ask for an extra to see if there's more.
|
||||||
|
|
||||||
|
@ -9,14 +9,12 @@ create table profile (
|
|||||||
bio varchar(140) /* comment 'descriptive biography' */,
|
bio varchar(140) /* comment 'descriptive biography' */,
|
||||||
location varchar(255) /* comment 'physical location' */,
|
location varchar(255) /* comment 'physical location' */,
|
||||||
created timestamp not null /* comment 'date this record was created' */,
|
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 index profile_nickname_idx on profile using btree(nickname);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
create table avatar (
|
create table avatar (
|
||||||
profile_id integer not null /* comment 'foreign key to profile table' */ references profile (id) ,
|
profile_id integer not null /* comment 'foreign key to profile table' */ references profile (id) ,
|
||||||
original integer default 0 /* comment 'uploaded by user or generated?' */,
|
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_subscriber_idx on foreign_subscription using btree(subscriber);
|
||||||
create index foreign_subscription_subscribed_idx on foreign_subscription using btree(subscribed);
|
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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user