Use our custom tsearch dictionaries
authorMagnus Hagander <magnus@hagander.net>
Sun, 12 Aug 2012 15:30:58 +0000 (17:30 +0200)
committerMagnus Hagander <magnus@hagander.net>
Sun, 12 Aug 2012 15:30:58 +0000 (17:30 +0200)
These could probably do with some tuning as well...

django/archives/mailarchives/sql/message.sql

index 96bd5c1269477a6d3f551f3e2911105eb9437574..2eae0122ecf65feff2fade065298c2478a4d0543 100644 (file)
@@ -1,7 +1,38 @@
+CREATE TEXT SEARCH CONFIGURATION pg (COPY = pg_catalog.english );
+
+CREATE TEXT SEARCH DICTIONARY english_ispell (
+   TEMPLATE = ispell,
+   DictFile = en_us,
+   AffFile = en_us,
+   StopWords = english
+);
+CREATE TEXT SEARCH DICTIONARY pg_dict (
+   TEMPLATE = synonym,
+   SYNONYMS = pg_dict
+);
+CREATE TEXT SEARCH DICTIONARY pg_stop (
+   TEMPLATE = simple,
+   StopWords = pg_dict
+);
+ALTER TEXT SEARCH CONFIGURATION pg
+   ALTER MAPPING FOR asciiword, asciihword, hword_asciipart,
+                     word, hword, hword_part
+    WITH pg_stop, pg_dict, english_ispell, english_stem;
+ALTER TEXT SEARCH CONFIGURATION pg
+   DROP MAPPING FOR email, url, url_path, sfloat, float;
+
 ALTER TABLE messages ADD COLUMN rawtxt bytea;
 ALTER TABLE messages ADD COLUMN fti tsvector;
 
+CREATE FUNCTION messages_fti_trigger_func() RETURNS trigger AS $$
+BEGIN
+   NEW.fti = setweight(to_tsvector('public.pg', coalesce(new.subject, '')), 'A') ||
+             setweight(to_tsvector('public.pg', coalesce(new.bodytxt, '')), 'D');
+   RETURN NEW;
+END
+$$ LANGUAGE 'plpgsql';
+
 CREATE TRIGGER messages_fti_trigger
  BEFORE INSERT OR UPDATE OF subject, bodytxt ON  messages
- FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(fti, 'pg_catalog.english', subject, bodytxt);
+ FOR EACH ROW EXECUTE PROCEDURE messages_fti_trigger_func();
 CREATE INDEX messages_fti_idx ON messages USING gin(fti);