Dotclear

source: plugins/tsearch/tsearch2.sql @ 135

Revision 135, 20.0 KB checked in by olivier, 16 years ago (diff)

Tsearch plugin. EXPERIMENTAL AND FOR POSTGRESQL ONLY!

Line 
1DROP SCHEMA tsearch2 CASCADE;
2
3CREATE SCHEMA tsearch2;
4GRANT ALL ON SCHEMA tsearch2 TO public;
5COMMENT ON SCHEMA tsearch2 IS 'TSearch2 objects';
6
7-- Adjust this setting to control where the objects get CREATEd.
8SET search_path = tsearch2;
9
10BEGIN;
11
12--dict conf
13CREATE TABLE pg_ts_dict (
14     dict_name text not null primary key,
15     dict_init regprocedure,
16     dict_initoption     text,
17     dict_lexize    regprocedure not null,
18     dict_comment   text
19) with oids;
20GRANT ALL ON pg_ts_dict TO public;
21
22--dict interface
23CREATE FUNCTION lexize(oid, text) 
24     returns _text
25     as '$libdir/tsearch2'
26     language 'C'
27     with (isstrict);
28
29CREATE FUNCTION lexize(text, text)
30        returns _text
31        as '$libdir/tsearch2', 'lexize_byname'
32        language 'C'
33        with (isstrict);
34
35CREATE FUNCTION lexize(text)
36        returns _text
37        as '$libdir/tsearch2', 'lexize_bycurrent'
38        language 'C'
39        with (isstrict);
40
41CREATE FUNCTION set_curdict(int)
42     returns void
43     as '$libdir/tsearch2'
44     language 'C'
45     with (isstrict);
46
47CREATE FUNCTION set_curdict(text)
48     returns void
49     as '$libdir/tsearch2', 'set_curdict_byname'
50     language 'C'
51     with (isstrict);
52
53--built-in dictionaries
54CREATE FUNCTION dex_init(internal)
55     returns internal
56     as '$libdir/tsearch2' 
57     language 'C';
58
59CREATE FUNCTION dex_lexize(internal,internal,int4)
60     returns internal
61     as '$libdir/tsearch2'
62     language 'C'
63     with (isstrict);
64
65insert into pg_ts_dict select 
66     'simple', 
67     'dex_init(internal)',
68     null,
69     'dex_lexize(internal,internal,int4)',
70     'Simple example of dictionary.'
71;
72     
73CREATE FUNCTION snb_en_init(internal)
74     returns internal
75     as '$libdir/tsearch2' 
76     language 'C';
77
78CREATE FUNCTION snb_lexize(internal,internal,int4)
79     returns internal
80     as '$libdir/tsearch2'
81     language 'C'
82     with (isstrict);
83
84insert into pg_ts_dict select 
85     'en_stem', 
86     'snb_en_init(internal)',
87     'contrib/english.stop',
88     'snb_lexize(internal,internal,int4)',
89     'English Stemmer. Snowball.'
90;
91     
92CREATE FUNCTION spell_init(internal)
93     returns internal
94     as '$libdir/tsearch2' 
95     language 'C';
96
97CREATE FUNCTION spell_lexize(internal,internal,int4)
98     returns internal
99     as '$libdir/tsearch2'
100     language 'C'
101     with (isstrict);
102
103insert into pg_ts_dict select 
104     'ispell_template', 
105     'spell_init(internal)',
106     null,
107     'spell_lexize(internal,internal,int4)',
108     'ISpell interface. Must have .dict and .aff files'
109;
110
111CREATE FUNCTION syn_init(internal)
112     returns internal
113     as '$libdir/tsearch2' 
114     language 'C';
115
116CREATE FUNCTION syn_lexize(internal,internal,int4)
117     returns internal
118     as '$libdir/tsearch2'
119     language 'C'
120     with (isstrict);
121
122insert into pg_ts_dict select 
123     'synonym', 
124     'syn_init(internal)',
125     null,
126     'syn_lexize(internal,internal,int4)',
127     'Example of synonym dictionary'
128;
129
130--dict conf
131CREATE TABLE pg_ts_parser (
132     prs_name  text not null primary key,
133     prs_start regprocedure not null,
134     prs_nexttoken  regprocedure not null,
135     prs_end        regprocedure not null,
136     prs_headline   regprocedure not null,
137     prs_lextype    regprocedure not null,
138     prs_comment    text
139) with oids;
140GRANT ALL ON pg_ts_parser TO public;
141
142--sql-level interface
143CREATE TYPE tokentype
144     as (tokid int4, alias text, descr text); 
145
146CREATE FUNCTION token_type(int4)
147     returns setof tokentype
148     as '$libdir/tsearch2'
149     language 'C'
150     with (isstrict);
151
152CREATE FUNCTION token_type(text)
153     returns setof tokentype
154     as '$libdir/tsearch2', 'token_type_byname'
155     language 'C'
156     with (isstrict);
157
158CREATE FUNCTION token_type()
159     returns setof tokentype
160     as '$libdir/tsearch2', 'token_type_current'
161     language 'C'
162     with (isstrict);
163
164CREATE FUNCTION set_curprs(int)
165     returns void
166     as '$libdir/tsearch2'
167     language 'C'
168     with (isstrict);
169
170CREATE FUNCTION set_curprs(text)
171     returns void
172     as '$libdir/tsearch2', 'set_curprs_byname'
173     language 'C'
174     with (isstrict);
175
176CREATE TYPE tokenout
177     as (tokid int4, token text);
178
179CREATE FUNCTION parse(oid,text)
180     returns setof tokenout
181     as '$libdir/tsearch2'
182     language 'C'
183     with (isstrict);
184 
185CREATE FUNCTION parse(text,text)
186     returns setof tokenout
187     as '$libdir/tsearch2', 'parse_byname'
188     language 'C'
189     with (isstrict);
190 
191CREATE FUNCTION parse(text)
192     returns setof tokenout
193     as '$libdir/tsearch2', 'parse_current'
194     language 'C'
195     with (isstrict);
196 
197--default parser
198CREATE FUNCTION prsd_start(internal,int4)
199     returns internal
200     as '$libdir/tsearch2'
201     language 'C';
202
203CREATE FUNCTION prsd_getlexeme(internal,internal,internal)
204     returns int4
205     as '$libdir/tsearch2'
206     language 'C';
207
208CREATE FUNCTION prsd_end(internal)
209     returns void
210     as '$libdir/tsearch2'
211     language 'C';
212
213CREATE FUNCTION prsd_lextype(internal)
214     returns internal
215     as '$libdir/tsearch2'
216     language 'C';
217
218CREATE FUNCTION prsd_headline(internal,internal,internal)
219     returns internal
220     as '$libdir/tsearch2'
221     language 'C';
222
223insert into pg_ts_parser select
224     'default',
225     'prsd_start(internal,int4)',
226     'prsd_getlexeme(internal,internal,internal)',
227     'prsd_end(internal)',
228     'prsd_headline(internal,internal,internal)',
229     'prsd_lextype(internal)',
230     'Parser from OpenFTS v0.34'
231;   
232
233--tsearch config
234
235CREATE TABLE pg_ts_cfg (
236     ts_name        text not null primary key,
237     prs_name  text not null,
238     locale         text
239) with oids;
240GRANT ALL ON pg_ts_cfg TO public;
241
242CREATE TABLE pg_ts_cfgmap (
243     ts_name        text not null,
244     tok_alias text not null,
245     dict_name text[],
246     primary key (ts_name,tok_alias)
247) with oids;
248GRANT ALL ON pg_ts_cfgmap TO public;
249
250CREATE FUNCTION set_curcfg(int)
251     returns void
252     as '$libdir/tsearch2'
253     language 'C'
254     with (isstrict);
255
256CREATE FUNCTION set_curcfg(text)
257     returns void
258     as '$libdir/tsearch2', 'set_curcfg_byname'
259     language 'C'
260     with (isstrict);
261
262CREATE FUNCTION show_curcfg()
263     returns oid
264     as '$libdir/tsearch2'
265     language 'C'
266     with (isstrict);
267
268insert into pg_ts_cfg values ('default', 'default','C');
269insert into pg_ts_cfg values ('simple', 'default');
270
271insert into pg_ts_cfgmap values ('default', 'lword', '{en_stem}');
272insert into pg_ts_cfgmap values ('default', 'nlword', '{simple}');
273insert into pg_ts_cfgmap values ('default', 'word', '{simple}');
274insert into pg_ts_cfgmap values ('default', 'email', '{simple}');
275insert into pg_ts_cfgmap values ('default', 'url', '{simple}');
276insert into pg_ts_cfgmap values ('default', 'host', '{simple}');
277insert into pg_ts_cfgmap values ('default', 'sfloat', '{simple}');
278insert into pg_ts_cfgmap values ('default', 'version', '{simple}');
279insert into pg_ts_cfgmap values ('default', 'part_hword', '{simple}');
280insert into pg_ts_cfgmap values ('default', 'nlpart_hword', '{simple}');
281insert into pg_ts_cfgmap values ('default', 'lpart_hword', '{en_stem}');
282insert into pg_ts_cfgmap values ('default', 'hword', '{simple}');
283insert into pg_ts_cfgmap values ('default', 'lhword', '{en_stem}');
284insert into pg_ts_cfgmap values ('default', 'nlhword', '{simple}');
285insert into pg_ts_cfgmap values ('default', 'uri', '{simple}');
286insert into pg_ts_cfgmap values ('default', 'file', '{simple}');
287insert into pg_ts_cfgmap values ('default', 'float', '{simple}');
288insert into pg_ts_cfgmap values ('default', 'int', '{simple}');
289insert into pg_ts_cfgmap values ('default', 'uint', '{simple}');
290insert into pg_ts_cfgmap values ('simple', 'lword', '{simple}');
291insert into pg_ts_cfgmap values ('simple', 'nlword', '{simple}');
292insert into pg_ts_cfgmap values ('simple', 'word', '{simple}');
293insert into pg_ts_cfgmap values ('simple', 'email', '{simple}');
294insert into pg_ts_cfgmap values ('simple', 'url', '{simple}');
295insert into pg_ts_cfgmap values ('simple', 'host', '{simple}');
296insert into pg_ts_cfgmap values ('simple', 'sfloat', '{simple}');
297insert into pg_ts_cfgmap values ('simple', 'version', '{simple}');
298insert into pg_ts_cfgmap values ('simple', 'part_hword', '{simple}');
299insert into pg_ts_cfgmap values ('simple', 'nlpart_hword', '{simple}');
300insert into pg_ts_cfgmap values ('simple', 'lpart_hword', '{simple}');
301insert into pg_ts_cfgmap values ('simple', 'hword', '{simple}');
302insert into pg_ts_cfgmap values ('simple', 'lhword', '{simple}');
303insert into pg_ts_cfgmap values ('simple', 'nlhword', '{simple}');
304insert into pg_ts_cfgmap values ('simple', 'uri', '{simple}');
305insert into pg_ts_cfgmap values ('simple', 'file', '{simple}');
306insert into pg_ts_cfgmap values ('simple', 'float', '{simple}');
307insert into pg_ts_cfgmap values ('simple', 'int', '{simple}');
308insert into pg_ts_cfgmap values ('simple', 'uint', '{simple}');
309
310--tsvector type
311CREATE FUNCTION tsvector_in(cstring)
312RETURNS tsvector
313AS '$libdir/tsearch2'
314LANGUAGE 'C' with (isstrict);
315
316CREATE FUNCTION tsvector_out(tsvector)
317RETURNS cstring
318AS '$libdir/tsearch2'
319LANGUAGE 'C' with (isstrict);
320
321CREATE TYPE tsvector (
322        INTERNALLENGTH = -1,
323        INPUT = tsvector_in,
324        OUTPUT = tsvector_out,
325        STORAGE = extended
326);
327
328CREATE FUNCTION length(tsvector)
329RETURNS int4
330AS '$libdir/tsearch2', 'tsvector_length'
331LANGUAGE 'C' with (isstrict,iscachable);
332
333CREATE FUNCTION to_tsvector(oid, text)
334RETURNS tsvector
335AS '$libdir/tsearch2'
336LANGUAGE 'C' with (isstrict,iscachable);
337
338CREATE FUNCTION to_tsvector(text, text)
339RETURNS tsvector
340AS '$libdir/tsearch2', 'to_tsvector_name'
341LANGUAGE 'C' with (isstrict,iscachable);
342
343CREATE FUNCTION to_tsvector(text)
344RETURNS tsvector
345AS '$libdir/tsearch2', 'to_tsvector_current'
346LANGUAGE 'C' with (isstrict,iscachable);
347
348CREATE FUNCTION strip(tsvector)
349RETURNS tsvector
350AS '$libdir/tsearch2'
351LANGUAGE 'C' with (isstrict,iscachable);
352
353CREATE FUNCTION setweight(tsvector,"char")
354RETURNS tsvector
355AS '$libdir/tsearch2'
356LANGUAGE 'C' with (isstrict,iscachable);
357
358CREATE FUNCTION concat(tsvector,tsvector)
359RETURNS tsvector
360AS '$libdir/tsearch2'
361LANGUAGE 'C' with (isstrict,iscachable);
362
363CREATE OPERATOR || (
364        LEFTARG = tsvector,
365        RIGHTARG = tsvector,
366        PROCEDURE = concat
367);
368
369--query type
370CREATE FUNCTION tsquery_in(cstring)
371RETURNS tsquery
372AS '$libdir/tsearch2'
373LANGUAGE 'C' with (isstrict);
374
375CREATE FUNCTION tsquery_out(tsquery)
376RETURNS cstring
377AS '$libdir/tsearch2'
378LANGUAGE 'C' with (isstrict);
379
380CREATE TYPE tsquery (
381        INTERNALLENGTH = -1,
382        INPUT = tsquery_in,
383        OUTPUT = tsquery_out
384);
385
386CREATE FUNCTION querytree(tsquery)
387RETURNS text
388AS '$libdir/tsearch2', 'tsquerytree'
389LANGUAGE 'C' with (isstrict);
390
391CREATE FUNCTION to_tsquery(oid, text)
392RETURNS tsquery
393AS '$libdir/tsearch2'
394LANGUAGE 'c' with (isstrict,iscachable);
395
396CREATE FUNCTION to_tsquery(text, text)
397RETURNS tsquery
398AS '$libdir/tsearch2','to_tsquery_name'
399LANGUAGE 'c' with (isstrict,iscachable);
400
401CREATE FUNCTION to_tsquery(text)
402RETURNS tsquery
403AS '$libdir/tsearch2','to_tsquery_current'
404LANGUAGE 'c' with (isstrict,iscachable);
405
406--operations
407CREATE FUNCTION exectsq(tsvector, tsquery)
408RETURNS bool
409AS '$libdir/tsearch2'
410LANGUAGE 'C' with (isstrict, iscachable);
411 
412COMMENT ON FUNCTION exectsq(tsvector, tsquery) IS 'boolean operation with text index';
413
414CREATE FUNCTION rexectsq(tsquery, tsvector)
415RETURNS bool
416AS '$libdir/tsearch2'
417LANGUAGE 'C' with (isstrict, iscachable);
418
419COMMENT ON FUNCTION rexectsq(tsquery, tsvector) IS 'boolean operation with text index';
420
421CREATE OPERATOR @@ (
422        LEFTARG = tsvector,
423        RIGHTARG = tsquery,
424        PROCEDURE = exectsq,
425        COMMUTATOR = '@@',
426        RESTRICT = contsel,
427        JOIN = contjoinsel
428);
429CREATE OPERATOR @@ (
430        LEFTARG = tsquery,
431        RIGHTARG = tsvector,
432        PROCEDURE = rexectsq,
433        COMMUTATOR = '@@',
434        RESTRICT = contsel,
435        JOIN = contjoinsel
436);
437
438--Trigger
439CREATE FUNCTION tsearch2()
440RETURNS trigger
441AS '$libdir/tsearch2'
442LANGUAGE 'C';
443
444--Relevation
445CREATE FUNCTION rank(float4[], tsvector, tsquery)
446RETURNS float4
447AS '$libdir/tsearch2'
448LANGUAGE 'C' WITH (isstrict, iscachable);
449
450CREATE FUNCTION rank(float4[], tsvector, tsquery, int4)
451RETURNS float4
452AS '$libdir/tsearch2'
453LANGUAGE 'C' WITH (isstrict, iscachable);
454
455CREATE FUNCTION rank(tsvector, tsquery)
456RETURNS float4
457AS '$libdir/tsearch2', 'rank_def'
458LANGUAGE 'C' WITH (isstrict, iscachable);
459
460CREATE FUNCTION rank(tsvector, tsquery, int4)
461RETURNS float4
462AS '$libdir/tsearch2', 'rank_def'
463LANGUAGE 'C' WITH (isstrict, iscachable);
464
465CREATE FUNCTION rank_cd(int4, tsvector, tsquery)
466RETURNS float4
467AS '$libdir/tsearch2'
468LANGUAGE 'C' WITH (isstrict, iscachable);
469
470CREATE FUNCTION rank_cd(int4, tsvector, tsquery, int4)
471RETURNS float4
472AS '$libdir/tsearch2'
473LANGUAGE 'C' WITH (isstrict, iscachable);
474
475CREATE FUNCTION rank_cd(tsvector, tsquery)
476RETURNS float4
477AS '$libdir/tsearch2', 'rank_cd_def'
478LANGUAGE 'C' WITH (isstrict, iscachable);
479
480CREATE FUNCTION rank_cd(tsvector, tsquery, int4)
481RETURNS float4
482AS '$libdir/tsearch2', 'rank_cd_def'
483LANGUAGE 'C' WITH (isstrict, iscachable);
484
485CREATE FUNCTION headline(oid, text, tsquery, text)
486RETURNS text
487AS '$libdir/tsearch2', 'headline'
488LANGUAGE 'C' WITH (isstrict, iscachable);
489
490CREATE FUNCTION headline(oid, text, tsquery)
491RETURNS text
492AS '$libdir/tsearch2', 'headline'
493LANGUAGE 'C' WITH (isstrict, iscachable);
494
495CREATE FUNCTION headline(text, text, tsquery, text)
496RETURNS text
497AS '$libdir/tsearch2', 'headline_byname'
498LANGUAGE 'C' WITH (isstrict, iscachable);
499
500CREATE FUNCTION headline(text, text, tsquery)
501RETURNS text
502AS '$libdir/tsearch2', 'headline_byname'
503LANGUAGE 'C' WITH (isstrict, iscachable);
504
505CREATE FUNCTION headline(text, tsquery, text)
506RETURNS text
507AS '$libdir/tsearch2', 'headline_current'
508LANGUAGE 'C' WITH (isstrict, iscachable);
509
510CREATE FUNCTION headline(text, tsquery)
511RETURNS text
512AS '$libdir/tsearch2', 'headline_current'
513LANGUAGE 'C' WITH (isstrict, iscachable);
514
515--GiST
516--GiST key type
517CREATE FUNCTION gtsvector_in(cstring)
518RETURNS gtsvector
519AS '$libdir/tsearch2'
520LANGUAGE 'C' with (isstrict);
521
522CREATE FUNCTION gtsvector_out(gtsvector)
523RETURNS cstring
524AS '$libdir/tsearch2'
525LANGUAGE 'C' with (isstrict);
526
527CREATE TYPE gtsvector (
528        INTERNALLENGTH = -1,
529        INPUT = gtsvector_in,
530        OUTPUT = gtsvector_out
531);
532
533-- support FUNCTIONs
534CREATE FUNCTION gtsvector_consistent(gtsvector,internal,int4)
535RETURNS bool
536AS '$libdir/tsearch2'
537LANGUAGE 'C';
538 
539CREATE FUNCTION gtsvector_compress(internal)
540RETURNS internal
541AS '$libdir/tsearch2'
542LANGUAGE 'C';
543
544CREATE FUNCTION gtsvector_decompress(internal)
545RETURNS internal
546AS '$libdir/tsearch2'
547LANGUAGE 'C';
548
549CREATE FUNCTION gtsvector_penalty(internal,internal,internal)
550RETURNS internal
551AS '$libdir/tsearch2'
552LANGUAGE 'C' with (isstrict);
553
554CREATE FUNCTION gtsvector_picksplit(internal, internal)
555RETURNS internal
556AS '$libdir/tsearch2'
557LANGUAGE 'C';
558
559CREATE FUNCTION gtsvector_union(internal, internal)
560RETURNS _int4
561AS '$libdir/tsearch2'
562LANGUAGE 'C';
563
564CREATE FUNCTION gtsvector_same(gtsvector, gtsvector, internal)
565RETURNS internal
566AS '$libdir/tsearch2'
567LANGUAGE 'C';
568
569-- CREATE the OPERATOR class
570CREATE OPERATOR CLASS gist_tsvector_ops
571DEFAULT FOR TYPE tsvector USING gist
572AS
573        OPERATOR        1       @@ (tsvector, tsquery)  RECHECK ,
574        FUNCTION        1       gtsvector_consistent (gtsvector, internal, int4),
575        FUNCTION        2       gtsvector_union (internal, internal),
576        FUNCTION        3       gtsvector_compress (internal),
577        FUNCTION        4       gtsvector_decompress (internal),
578        FUNCTION        5       gtsvector_penalty (internal, internal, internal),
579        FUNCTION        6       gtsvector_picksplit (internal, internal),
580        FUNCTION        7       gtsvector_same (gtsvector, gtsvector, internal),
581        STORAGE         gtsvector;
582
583
584--stat info
585CREATE TYPE statinfo
586     as (word text, ndoc int4, nentry int4);
587
588--CREATE FUNCTION tsstat_in(cstring)
589--RETURNS tsstat
590--AS '$libdir/tsearch2'
591--LANGUAGE 'C' with (isstrict);
592--
593--CREATE FUNCTION tsstat_out(tsstat)
594--RETURNS cstring
595--AS '$libdir/tsearch2'
596--LANGUAGE 'C' with (isstrict);
597--
598--CREATE TYPE tsstat (
599--        INTERNALLENGTH = -1,
600--        INPUT = tsstat_in,
601--        OUTPUT = tsstat_out,
602--        STORAGE = plain
603--);
604--
605--CREATE FUNCTION ts_accum(tsstat,tsvector)
606--RETURNS tsstat
607--AS '$libdir/tsearch2'
608--LANGUAGE 'C' with (isstrict);
609--
610--CREATE FUNCTION ts_accum_finish(tsstat)
611--   returns setof statinfo
612--   as '$libdir/tsearch2'
613--   language 'C'
614--   with (isstrict);
615--
616--CREATE AGGREGATE stat (
617--   BASETYPE=tsvector,
618--   SFUNC=ts_accum,
619--   STYPE=tsstat,
620--   FINALFUNC = ts_accum_finish,
621--   initcond = ''
622--);
623
624CREATE FUNCTION stat(text)
625     returns setof statinfo
626     as '$libdir/tsearch2', 'ts_stat'
627     language 'C'
628     with (isstrict);
629
630CREATE FUNCTION stat(text,text)
631     returns setof statinfo
632     as '$libdir/tsearch2', 'ts_stat'
633     language 'C'
634     with (isstrict);
635
636--reset - just for debuging
637CREATE FUNCTION reset_tsearch()
638        returns void
639        as '$libdir/tsearch2'
640        language 'C'
641        with (isstrict);
642
643--get cover (debug for rank_cd)
644CREATE FUNCTION get_covers(tsvector,tsquery)
645        returns text
646        as '$libdir/tsearch2'
647        language 'C'
648        with (isstrict);
649
650--debug function
651create type tsdebug as (
652        ts_name text,
653        tok_type text,
654        description text,
655        token   text,
656        dict_name text[],
657        "tsvector" tsvector
658);
659
660create function _get_parser_from_curcfg() 
661returns text as 
662' select prs_name from pg_ts_cfg where oid = show_curcfg() '
663language 'SQL' with(isstrict,iscachable);
664
665create function ts_debug(text)
666returns setof tsdebug as '
667select
668        m.ts_name,
669        t.alias as tok_type,
670        t.descr as description,
671        p.token,
672        m.dict_name,
673        strip(to_tsvector(p.token)) as tsvector
674from
675        parse( _get_parser_from_curcfg(), $1 ) as p,
676        token_type() as t,
677        pg_ts_cfgmap as m,
678        pg_ts_cfg as c
679where
680        t.tokid=p.tokid and
681        t.alias = m.tok_alias and
682        m.ts_name=c.ts_name and
683        c.oid=show_curcfg()
684' language 'SQL' with(isstrict);
685
686--compare functions
687CREATE FUNCTION tsvector_cmp(tsvector,tsvector)
688RETURNS int4
689AS '$libdir/tsearch2'
690LANGUAGE 'C' WITH (isstrict,iscachable);
691
692CREATE FUNCTION tsvector_lt(tsvector,tsvector)
693RETURNS bool
694AS '$libdir/tsearch2'
695LANGUAGE 'C' WITH (isstrict,iscachable);
696
697CREATE FUNCTION tsvector_le(tsvector,tsvector)
698RETURNS bool
699AS '$libdir/tsearch2'
700LANGUAGE 'C' WITH (isstrict,iscachable);
701       
702CREATE FUNCTION tsvector_eq(tsvector,tsvector)
703RETURNS bool
704AS '$libdir/tsearch2'
705LANGUAGE 'C' WITH (isstrict,iscachable);
706
707CREATE FUNCTION tsvector_ge(tsvector,tsvector)
708RETURNS bool
709AS '$libdir/tsearch2'
710LANGUAGE 'C' WITH (isstrict,iscachable);
711       
712CREATE FUNCTION tsvector_gt(tsvector,tsvector)
713RETURNS bool
714AS '$libdir/tsearch2'
715LANGUAGE 'C' WITH (isstrict,iscachable);
716
717CREATE FUNCTION tsvector_ne(tsvector,tsvector)
718RETURNS bool
719AS '$libdir/tsearch2'
720LANGUAGE 'C' WITH (isstrict,iscachable);
721
722CREATE OPERATOR < (
723        LEFTARG = tsvector,
724        RIGHTARG = tsvector,
725        PROCEDURE = tsvector_lt,
726        COMMUTATOR = '>',
727        NEGATOR = '>=',
728        RESTRICT = contsel,
729        JOIN = contjoinsel
730);
731
732CREATE OPERATOR <= (
733        LEFTARG = tsvector,
734        RIGHTARG = tsvector,
735        PROCEDURE = tsvector_le,
736        COMMUTATOR = '>=',
737        NEGATOR = '>',
738        RESTRICT = contsel,
739        JOIN = contjoinsel
740);
741
742CREATE OPERATOR >= (
743        LEFTARG = tsvector,
744        RIGHTARG = tsvector,
745        PROCEDURE = tsvector_ge,
746        COMMUTATOR = '<=',
747        NEGATOR = '<',
748        RESTRICT = contsel,
749        JOIN = contjoinsel
750);
751
752CREATE OPERATOR > (
753        LEFTARG = tsvector,
754        RIGHTARG = tsvector,
755        PROCEDURE = tsvector_gt,
756        COMMUTATOR = '<',
757        NEGATOR = '<=',
758        RESTRICT = contsel,
759        JOIN = contjoinsel
760);
761
762CREATE OPERATOR = (
763        LEFTARG = tsvector,
764        RIGHTARG = tsvector,
765        PROCEDURE = tsvector_eq,
766        COMMUTATOR = '=',
767        NEGATOR = '<>',
768        RESTRICT = eqsel,
769        JOIN = eqjoinsel,
770        SORT1 = '<',
771        SORT2 = '<'
772);
773
774CREATE OPERATOR <> (
775        LEFTARG = tsvector,
776        RIGHTARG = tsvector,
777        PROCEDURE = tsvector_ne,
778        COMMUTATOR = '<>',
779        NEGATOR = '=',
780        RESTRICT = neqsel,
781        JOIN = neqjoinsel
782);
783
784CREATE OPERATOR CLASS tsvector_ops
785    DEFAULT FOR TYPE tsvector USING btree AS
786        OPERATOR        1       < ,
787        OPERATOR        2       <= , 
788        OPERATOR        3       = ,
789        OPERATOR        4       >= ,
790        OPERATOR        5       > ,
791        FUNCTION        1       tsvector_cmp(tsvector, tsvector);
792
793--example of ISpell dictionary
794--update pg_ts_dict set dict_initoption='DictFile="/usr/local/share/ispell/russian.dict" ,AffFile ="/usr/local/share/ispell/russian.aff", StopFile="/usr/local/share/ispell/russian.stop"' where dict_name='ispell_template';
795--example of synonym dict
796--update pg_ts_dict set dict_initoption='/usr/local/share/ispell/english.syn' where dict_id=5;
797END;
Note: See TracBrowser for help on using the repository browser.

Sites map