mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-19 02:53:27 +02:00
- supports multibyte encodings - more strict rules for lexemes - flex isn't used Add: - tsquery plainto_tsquery(text) Function makes tsquery from plain text. - &&, ||, !! operation for tsquery for combining tsquery from it's parts: 'foo & bar' || 'asd' => 'foo & bar | asd'
1121 lines
29 KiB
MySQL
1121 lines
29 KiB
MySQL
-- Adjust this setting to control where the objects get CREATEd.
|
|
SET search_path = public;
|
|
|
|
BEGIN;
|
|
|
|
--dict conf
|
|
CREATE TABLE pg_ts_dict (
|
|
dict_name text not null primary key,
|
|
dict_init regprocedure,
|
|
dict_initoption text,
|
|
dict_lexize regprocedure not null,
|
|
dict_comment text
|
|
) with oids;
|
|
|
|
--dict interface
|
|
CREATE FUNCTION lexize(oid, text)
|
|
returns _text
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION lexize(text, text)
|
|
returns _text
|
|
as 'MODULE_PATHNAME', 'lexize_byname'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION lexize(text)
|
|
returns _text
|
|
as 'MODULE_PATHNAME', 'lexize_bycurrent'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION set_curdict(int)
|
|
returns void
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION set_curdict(text)
|
|
returns void
|
|
as 'MODULE_PATHNAME', 'set_curdict_byname'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
--built-in dictionaries
|
|
CREATE FUNCTION dex_init(internal)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE FUNCTION dex_lexize(internal,internal,int4)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
insert into pg_ts_dict select
|
|
'simple',
|
|
'dex_init(internal)',
|
|
null,
|
|
'dex_lexize(internal,internal,int4)',
|
|
'Simple example of dictionary.'
|
|
;
|
|
|
|
CREATE FUNCTION snb_en_init(internal)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE FUNCTION snb_lexize(internal,internal,int4)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
insert into pg_ts_dict select
|
|
'en_stem',
|
|
'snb_en_init(internal)',
|
|
'contrib/english.stop',
|
|
'snb_lexize(internal,internal,int4)',
|
|
'English Stemmer. Snowball.'
|
|
;
|
|
|
|
CREATE FUNCTION snb_ru_init(internal)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
insert into pg_ts_dict select
|
|
'ru_stem',
|
|
'snb_ru_init(internal)',
|
|
'contrib/russian.stop',
|
|
'snb_lexize(internal,internal,int4)',
|
|
'Russian Stemmer. Snowball.'
|
|
;
|
|
|
|
CREATE FUNCTION spell_init(internal)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE FUNCTION spell_lexize(internal,internal,int4)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
insert into pg_ts_dict select
|
|
'ispell_template',
|
|
'spell_init(internal)',
|
|
null,
|
|
'spell_lexize(internal,internal,int4)',
|
|
'ISpell interface. Must have .dict and .aff files'
|
|
;
|
|
|
|
CREATE FUNCTION syn_init(internal)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE FUNCTION syn_lexize(internal,internal,int4)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
insert into pg_ts_dict select
|
|
'synonym',
|
|
'syn_init(internal)',
|
|
null,
|
|
'syn_lexize(internal,internal,int4)',
|
|
'Example of synonym dictionary'
|
|
;
|
|
|
|
--dict conf
|
|
CREATE TABLE pg_ts_parser (
|
|
prs_name text not null primary key,
|
|
prs_start regprocedure not null,
|
|
prs_nexttoken regprocedure not null,
|
|
prs_end regprocedure not null,
|
|
prs_headline regprocedure not null,
|
|
prs_lextype regprocedure not null,
|
|
prs_comment text
|
|
) with oids;
|
|
|
|
--sql-level interface
|
|
CREATE TYPE tokentype
|
|
as (tokid int4, alias text, descr text);
|
|
|
|
CREATE FUNCTION token_type(int4)
|
|
returns setof tokentype
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION token_type(text)
|
|
returns setof tokentype
|
|
as 'MODULE_PATHNAME', 'token_type_byname'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION token_type()
|
|
returns setof tokentype
|
|
as 'MODULE_PATHNAME', 'token_type_current'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION set_curprs(int)
|
|
returns void
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION set_curprs(text)
|
|
returns void
|
|
as 'MODULE_PATHNAME', 'set_curprs_byname'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE TYPE tokenout
|
|
as (tokid int4, token text);
|
|
|
|
CREATE FUNCTION parse(oid,text)
|
|
returns setof tokenout
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION parse(text,text)
|
|
returns setof tokenout
|
|
as 'MODULE_PATHNAME', 'parse_byname'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION parse(text)
|
|
returns setof tokenout
|
|
as 'MODULE_PATHNAME', 'parse_current'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
--default parser
|
|
CREATE FUNCTION prsd_start(internal,int4)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE FUNCTION prsd_getlexeme(internal,internal,internal)
|
|
returns int4
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE FUNCTION prsd_end(internal)
|
|
returns void
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE FUNCTION prsd_lextype(internal)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE FUNCTION prsd_headline(internal,internal,internal)
|
|
returns internal
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
insert into pg_ts_parser select
|
|
'default',
|
|
'prsd_start(internal,int4)',
|
|
'prsd_getlexeme(internal,internal,internal)',
|
|
'prsd_end(internal)',
|
|
'prsd_headline(internal,internal,internal)',
|
|
'prsd_lextype(internal)',
|
|
'Parser from OpenFTS v0.34'
|
|
;
|
|
|
|
--tsearch config
|
|
|
|
CREATE TABLE pg_ts_cfg (
|
|
ts_name text not null primary key,
|
|
prs_name text not null,
|
|
locale text
|
|
) with oids;
|
|
|
|
CREATE TABLE pg_ts_cfgmap (
|
|
ts_name text not null,
|
|
tok_alias text not null,
|
|
dict_name text[],
|
|
primary key (ts_name,tok_alias)
|
|
) with oids;
|
|
|
|
CREATE FUNCTION set_curcfg(int)
|
|
returns void
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION set_curcfg(text)
|
|
returns void
|
|
as 'MODULE_PATHNAME', 'set_curcfg_byname'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION show_curcfg()
|
|
returns oid
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
insert into pg_ts_cfg values ('default', 'default','C');
|
|
insert into pg_ts_cfg values ('default_russian', 'default','ru_RU.KOI8-R');
|
|
insert into pg_ts_cfg values ('simple', 'default');
|
|
|
|
insert into pg_ts_cfgmap values ('default', 'lword', '{en_stem}');
|
|
insert into pg_ts_cfgmap values ('default', 'nlword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'word', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'email', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'url', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'host', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'sfloat', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'version', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'part_hword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'nlpart_hword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'lpart_hword', '{en_stem}');
|
|
insert into pg_ts_cfgmap values ('default', 'hword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'lhword', '{en_stem}');
|
|
insert into pg_ts_cfgmap values ('default', 'nlhword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'uri', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'file', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'float', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'int', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default', 'uint', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'lword', '{en_stem}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'nlword', '{ru_stem}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'word', '{ru_stem}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'email', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'url', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'host', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'sfloat', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'version', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'part_hword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'nlpart_hword', '{ru_stem}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'lpart_hword', '{en_stem}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'hword', '{ru_stem}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'lhword', '{en_stem}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'nlhword', '{ru_stem}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'uri', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'file', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'float', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'int', '{simple}');
|
|
insert into pg_ts_cfgmap values ('default_russian', 'uint', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'lword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'nlword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'word', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'email', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'url', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'host', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'sfloat', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'version', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'part_hword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'nlpart_hword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'lpart_hword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'hword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'lhword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'nlhword', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'uri', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'file', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'float', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'int', '{simple}');
|
|
insert into pg_ts_cfgmap values ('simple', 'uint', '{simple}');
|
|
|
|
--tsvector type
|
|
CREATE FUNCTION tsvector_in(cstring)
|
|
RETURNS tsvector
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE FUNCTION tsvector_out(tsvector)
|
|
RETURNS cstring
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE TYPE tsvector (
|
|
INTERNALLENGTH = -1,
|
|
INPUT = tsvector_in,
|
|
OUTPUT = tsvector_out,
|
|
STORAGE = extended
|
|
);
|
|
|
|
CREATE FUNCTION length(tsvector)
|
|
RETURNS int4
|
|
AS 'MODULE_PATHNAME', 'tsvector_length'
|
|
LANGUAGE 'C' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION to_tsvector(oid, text)
|
|
RETURNS tsvector
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION to_tsvector(text, text)
|
|
RETURNS tsvector
|
|
AS 'MODULE_PATHNAME', 'to_tsvector_name'
|
|
LANGUAGE 'C' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION to_tsvector(text)
|
|
RETURNS tsvector
|
|
AS 'MODULE_PATHNAME', 'to_tsvector_current'
|
|
LANGUAGE 'C' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION strip(tsvector)
|
|
RETURNS tsvector
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION setweight(tsvector,"char")
|
|
RETURNS tsvector
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION concat(tsvector,tsvector)
|
|
RETURNS tsvector
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict,iscachable);
|
|
|
|
CREATE OPERATOR || (
|
|
LEFTARG = tsvector,
|
|
RIGHTARG = tsvector,
|
|
PROCEDURE = concat
|
|
);
|
|
|
|
--query type
|
|
CREATE FUNCTION tsquery_in(cstring)
|
|
RETURNS tsquery
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE FUNCTION tsquery_out(tsquery)
|
|
RETURNS cstring
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE TYPE tsquery (
|
|
INTERNALLENGTH = -1,
|
|
ALIGNMENT = int4,
|
|
INPUT = tsquery_in,
|
|
OUTPUT = tsquery_out
|
|
);
|
|
|
|
CREATE FUNCTION querytree(tsquery)
|
|
RETURNS text
|
|
AS 'MODULE_PATHNAME', 'tsquerytree'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE FUNCTION to_tsquery(oid, text)
|
|
RETURNS tsquery
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'c' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION to_tsquery(text, text)
|
|
RETURNS tsquery
|
|
AS 'MODULE_PATHNAME','to_tsquery_name'
|
|
LANGUAGE 'c' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION to_tsquery(text)
|
|
RETURNS tsquery
|
|
AS 'MODULE_PATHNAME','to_tsquery_current'
|
|
LANGUAGE 'c' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION plainto_tsquery(oid, text)
|
|
RETURNS tsquery
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'c' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION plainto_tsquery(text, text)
|
|
RETURNS tsquery
|
|
AS 'MODULE_PATHNAME','plainto_tsquery_name'
|
|
LANGUAGE 'c' with (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION plainto_tsquery(text)
|
|
RETURNS tsquery
|
|
AS 'MODULE_PATHNAME','plainto_tsquery_current'
|
|
LANGUAGE 'c' with (isstrict,iscachable);
|
|
|
|
--operations
|
|
CREATE FUNCTION exectsq(tsvector, tsquery)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict, iscachable);
|
|
|
|
COMMENT ON FUNCTION exectsq(tsvector, tsquery) IS 'boolean operation with text index';
|
|
|
|
CREATE FUNCTION rexectsq(tsquery, tsvector)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict, iscachable);
|
|
|
|
COMMENT ON FUNCTION rexectsq(tsquery, tsvector) IS 'boolean operation with text index';
|
|
|
|
CREATE OPERATOR @@ (
|
|
LEFTARG = tsvector,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = exectsq,
|
|
COMMUTATOR = '@@',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
CREATE OPERATOR @@ (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsvector,
|
|
PROCEDURE = rexectsq,
|
|
COMMUTATOR = '@@',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
--Trigger
|
|
CREATE FUNCTION tsearch2()
|
|
RETURNS trigger
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
--Relevation
|
|
CREATE FUNCTION rank(float4[], tsvector, tsquery)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION rank(float4[], tsvector, tsquery, int4)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION rank(tsvector, tsquery)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME', 'rank_def'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION rank(tsvector, tsquery, int4)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME', 'rank_def'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION rank_cd(int4, tsvector, tsquery)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION rank_cd(int4, tsvector, tsquery, int4)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION rank_cd(tsvector, tsquery)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME', 'rank_cd_def'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION rank_cd(tsvector, tsquery, int4)
|
|
RETURNS float4
|
|
AS 'MODULE_PATHNAME', 'rank_cd_def'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION headline(oid, text, tsquery, text)
|
|
RETURNS text
|
|
AS 'MODULE_PATHNAME', 'headline'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION headline(oid, text, tsquery)
|
|
RETURNS text
|
|
AS 'MODULE_PATHNAME', 'headline'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION headline(text, text, tsquery, text)
|
|
RETURNS text
|
|
AS 'MODULE_PATHNAME', 'headline_byname'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION headline(text, text, tsquery)
|
|
RETURNS text
|
|
AS 'MODULE_PATHNAME', 'headline_byname'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION headline(text, tsquery, text)
|
|
RETURNS text
|
|
AS 'MODULE_PATHNAME', 'headline_current'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
CREATE FUNCTION headline(text, tsquery)
|
|
RETURNS text
|
|
AS 'MODULE_PATHNAME', 'headline_current'
|
|
LANGUAGE 'C' WITH (isstrict, iscachable);
|
|
|
|
--GiST
|
|
--GiST key type
|
|
CREATE FUNCTION gtsvector_in(cstring)
|
|
RETURNS gtsvector
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE FUNCTION gtsvector_out(gtsvector)
|
|
RETURNS cstring
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE TYPE gtsvector (
|
|
INTERNALLENGTH = -1,
|
|
INPUT = gtsvector_in,
|
|
OUTPUT = gtsvector_out
|
|
);
|
|
|
|
-- support FUNCTIONs
|
|
CREATE FUNCTION gtsvector_consistent(gtsvector,internal,int4)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsvector_compress(internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsvector_decompress(internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsvector_penalty(internal,internal,internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE FUNCTION gtsvector_picksplit(internal, internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsvector_union(internal, internal)
|
|
RETURNS _int4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsvector_same(gtsvector, gtsvector, internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
-- CREATE the OPERATOR class
|
|
CREATE OPERATOR CLASS gist_tsvector_ops
|
|
DEFAULT FOR TYPE tsvector USING gist
|
|
AS
|
|
OPERATOR 1 @@ (tsvector, tsquery) RECHECK ,
|
|
FUNCTION 1 gtsvector_consistent (gtsvector, internal, int4),
|
|
FUNCTION 2 gtsvector_union (internal, internal),
|
|
FUNCTION 3 gtsvector_compress (internal),
|
|
FUNCTION 4 gtsvector_decompress (internal),
|
|
FUNCTION 5 gtsvector_penalty (internal, internal, internal),
|
|
FUNCTION 6 gtsvector_picksplit (internal, internal),
|
|
FUNCTION 7 gtsvector_same (gtsvector, gtsvector, internal),
|
|
STORAGE gtsvector;
|
|
|
|
|
|
--stat info
|
|
CREATE TYPE statinfo
|
|
as (word text, ndoc int4, nentry int4);
|
|
|
|
--CREATE FUNCTION tsstat_in(cstring)
|
|
--RETURNS tsstat
|
|
--AS 'MODULE_PATHNAME'
|
|
--LANGUAGE 'C' with (isstrict);
|
|
--
|
|
--CREATE FUNCTION tsstat_out(tsstat)
|
|
--RETURNS cstring
|
|
--AS 'MODULE_PATHNAME'
|
|
--LANGUAGE 'C' with (isstrict);
|
|
--
|
|
--CREATE TYPE tsstat (
|
|
-- INTERNALLENGTH = -1,
|
|
-- INPUT = tsstat_in,
|
|
-- OUTPUT = tsstat_out,
|
|
-- STORAGE = plain
|
|
--);
|
|
--
|
|
--CREATE FUNCTION ts_accum(tsstat,tsvector)
|
|
--RETURNS tsstat
|
|
--AS 'MODULE_PATHNAME'
|
|
--LANGUAGE 'C' with (isstrict);
|
|
--
|
|
--CREATE FUNCTION ts_accum_finish(tsstat)
|
|
-- returns setof statinfo
|
|
-- as 'MODULE_PATHNAME'
|
|
-- language 'C'
|
|
-- with (isstrict);
|
|
--
|
|
--CREATE AGGREGATE stat (
|
|
-- BASETYPE=tsvector,
|
|
-- SFUNC=ts_accum,
|
|
-- STYPE=tsstat,
|
|
-- FINALFUNC = ts_accum_finish,
|
|
-- initcond = ''
|
|
--);
|
|
|
|
CREATE FUNCTION stat(text)
|
|
returns setof statinfo
|
|
as 'MODULE_PATHNAME', 'ts_stat'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
CREATE FUNCTION stat(text,text)
|
|
returns setof statinfo
|
|
as 'MODULE_PATHNAME', 'ts_stat'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
--reset - just for debuging
|
|
CREATE FUNCTION reset_tsearch()
|
|
returns void
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
--get cover (debug for rank_cd)
|
|
CREATE FUNCTION get_covers(tsvector,tsquery)
|
|
returns text
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict);
|
|
|
|
--debug function
|
|
create type tsdebug as (
|
|
ts_name text,
|
|
tok_type text,
|
|
description text,
|
|
token text,
|
|
dict_name text[],
|
|
"tsvector" tsvector
|
|
);
|
|
|
|
create function _get_parser_from_curcfg()
|
|
returns text as
|
|
' select prs_name from pg_ts_cfg where oid = show_curcfg() '
|
|
language 'SQL' with(isstrict,iscachable);
|
|
|
|
create function ts_debug(text)
|
|
returns setof tsdebug as '
|
|
select
|
|
m.ts_name,
|
|
t.alias as tok_type,
|
|
t.descr as description,
|
|
p.token,
|
|
m.dict_name,
|
|
strip(to_tsvector(p.token)) as tsvector
|
|
from
|
|
parse( _get_parser_from_curcfg(), $1 ) as p,
|
|
token_type() as t,
|
|
pg_ts_cfgmap as m,
|
|
pg_ts_cfg as c
|
|
where
|
|
t.tokid=p.tokid and
|
|
t.alias = m.tok_alias and
|
|
m.ts_name=c.ts_name and
|
|
c.oid=show_curcfg()
|
|
' language 'SQL' with(isstrict);
|
|
|
|
--compare functions
|
|
CREATE FUNCTION tsvector_cmp(tsvector,tsvector)
|
|
RETURNS int4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION tsvector_lt(tsvector,tsvector)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION tsvector_le(tsvector,tsvector)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION tsvector_eq(tsvector,tsvector)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION tsvector_ge(tsvector,tsvector)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION tsvector_gt(tsvector,tsvector)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE FUNCTION tsvector_ne(tsvector,tsvector)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE OPERATOR < (
|
|
LEFTARG = tsvector,
|
|
RIGHTARG = tsvector,
|
|
PROCEDURE = tsvector_lt,
|
|
COMMUTATOR = '>',
|
|
NEGATOR = '>=',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR <= (
|
|
LEFTARG = tsvector,
|
|
RIGHTARG = tsvector,
|
|
PROCEDURE = tsvector_le,
|
|
COMMUTATOR = '>=',
|
|
NEGATOR = '>',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR >= (
|
|
LEFTARG = tsvector,
|
|
RIGHTARG = tsvector,
|
|
PROCEDURE = tsvector_ge,
|
|
COMMUTATOR = '<=',
|
|
NEGATOR = '<',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR > (
|
|
LEFTARG = tsvector,
|
|
RIGHTARG = tsvector,
|
|
PROCEDURE = tsvector_gt,
|
|
COMMUTATOR = '<',
|
|
NEGATOR = '<=',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR = (
|
|
LEFTARG = tsvector,
|
|
RIGHTARG = tsvector,
|
|
PROCEDURE = tsvector_eq,
|
|
COMMUTATOR = '=',
|
|
NEGATOR = '<>',
|
|
RESTRICT = eqsel,
|
|
JOIN = eqjoinsel,
|
|
SORT1 = '<',
|
|
SORT2 = '<'
|
|
);
|
|
|
|
CREATE OPERATOR <> (
|
|
LEFTARG = tsvector,
|
|
RIGHTARG = tsvector,
|
|
PROCEDURE = tsvector_ne,
|
|
COMMUTATOR = '<>',
|
|
NEGATOR = '=',
|
|
RESTRICT = neqsel,
|
|
JOIN = neqjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR CLASS tsvector_ops
|
|
DEFAULT FOR TYPE tsvector USING btree AS
|
|
OPERATOR 1 < ,
|
|
OPERATOR 2 <= ,
|
|
OPERATOR 3 = ,
|
|
OPERATOR 4 >= ,
|
|
OPERATOR 5 > ,
|
|
FUNCTION 1 tsvector_cmp(tsvector, tsvector);
|
|
|
|
----------------Compare functions and operators for tsquery
|
|
CREATE OR REPLACE FUNCTION tsquery_cmp(tsquery,tsquery)
|
|
RETURNS int4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_lt(tsquery,tsquery)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_le(tsquery,tsquery)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_eq(tsquery,tsquery)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_ge(tsquery,tsquery)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_gt(tsquery,tsquery)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_ne(tsquery,tsquery)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' WITH (isstrict,iscachable);
|
|
|
|
|
|
CREATE OPERATOR < (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_lt,
|
|
COMMUTATOR = '>',
|
|
NEGATOR = '>=',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR <= (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_le,
|
|
COMMUTATOR = '>=',
|
|
NEGATOR = '>',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR >= (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_ge,
|
|
COMMUTATOR = '<=',
|
|
NEGATOR = '<',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR > (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_gt,
|
|
COMMUTATOR = '<',
|
|
NEGATOR = '<=',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
|
|
CREATE OPERATOR = (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_eq,
|
|
COMMUTATOR = '=',
|
|
NEGATOR = '<>',
|
|
RESTRICT = eqsel,
|
|
JOIN = eqjoinsel,
|
|
SORT1 = '<',
|
|
SORT2 = '<'
|
|
);
|
|
|
|
CREATE OPERATOR <> (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_ne,
|
|
COMMUTATOR = '<>',
|
|
NEGATOR = '=',
|
|
RESTRICT = neqsel,
|
|
JOIN = neqjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR CLASS tsquery_ops
|
|
DEFAULT FOR TYPE tsquery USING btree AS
|
|
OPERATOR 1 < ,
|
|
OPERATOR 2 <= ,
|
|
OPERATOR 3 = ,
|
|
OPERATOR 4 >= ,
|
|
OPERATOR 5 > ,
|
|
FUNCTION 1 tsquery_cmp(tsquery, tsquery);
|
|
|
|
CREATE OR REPLACE FUNCTION numnode(tsquery)
|
|
returns int4
|
|
as 'MODULE_PATHNAME', 'tsquery_numnode'
|
|
language 'C'
|
|
with (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_and(tsquery,tsquery)
|
|
returns tsquery
|
|
as 'MODULE_PATHNAME', 'tsquery_and'
|
|
language 'C'
|
|
with (isstrict,iscachable);
|
|
|
|
CREATE OPERATOR && (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_and,
|
|
COMMUTATOR = '&&',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_or(tsquery,tsquery)
|
|
returns tsquery
|
|
as 'MODULE_PATHNAME', 'tsquery_or'
|
|
language 'C'
|
|
with (isstrict,iscachable);
|
|
|
|
CREATE OPERATOR || (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_or,
|
|
COMMUTATOR = '||',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OR REPLACE FUNCTION tsquery_not(tsquery)
|
|
returns tsquery
|
|
as 'MODULE_PATHNAME', 'tsquery_not'
|
|
language 'C'
|
|
with (isstrict,iscachable);
|
|
|
|
CREATE OPERATOR !! (
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsquery_not
|
|
);
|
|
|
|
--------------rewrite subsystem
|
|
|
|
CREATE OR REPLACE FUNCTION rewrite(tsquery, text)
|
|
returns tsquery
|
|
as 'MODULE_PATHNAME', 'tsquery_rewrite'
|
|
language 'C'
|
|
with (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION rewrite(tsquery, tsquery, tsquery)
|
|
returns tsquery
|
|
as 'MODULE_PATHNAME', 'tsquery_rewrite_query'
|
|
language 'C'
|
|
with (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION rewrite_accum(tsquery,tsquery[])
|
|
RETURNS tsquery
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE OR REPLACE FUNCTION rewrite_finish(tsquery)
|
|
returns tsquery
|
|
as 'MODULE_PATHNAME'
|
|
language 'C';
|
|
|
|
CREATE AGGREGATE rewrite (
|
|
BASETYPE=tsquery[],
|
|
SFUNC=rewrite_accum,
|
|
STYPE=tsquery,
|
|
FINALFUNC = rewrite_finish
|
|
);
|
|
|
|
CREATE OR REPLACE FUNCTION tsq_mcontains(tsquery, tsquery)
|
|
returns bool
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict,iscachable);
|
|
|
|
CREATE OR REPLACE FUNCTION tsq_mcontained(tsquery, tsquery)
|
|
returns bool
|
|
as 'MODULE_PATHNAME'
|
|
language 'C'
|
|
with (isstrict,iscachable);
|
|
|
|
CREATE OPERATOR @ (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsq_mcontains,
|
|
COMMUTATOR = '~',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
CREATE OPERATOR ~ (
|
|
LEFTARG = tsquery,
|
|
RIGHTARG = tsquery,
|
|
PROCEDURE = tsq_mcontained,
|
|
COMMUTATOR = '@',
|
|
RESTRICT = contsel,
|
|
JOIN = contjoinsel
|
|
);
|
|
|
|
-----------gist support of rewrite------------------
|
|
|
|
CREATE FUNCTION gtsq_in(cstring)
|
|
RETURNS gtsq
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE FUNCTION gtsq_out(gtsq)
|
|
RETURNS cstring
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE TYPE gtsq (
|
|
INTERNALLENGTH = 8,
|
|
INPUT = gtsq_in,
|
|
OUTPUT = gtsq_out
|
|
);
|
|
|
|
CREATE FUNCTION gtsq_consistent(gtsq,internal,int4)
|
|
RETURNS bool
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsq_compress(internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsq_decompress(internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsq_penalty(internal,internal,internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C' with (isstrict);
|
|
|
|
CREATE FUNCTION gtsq_picksplit(internal, internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsq_union(bytea, internal)
|
|
RETURNS _int4
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE FUNCTION gtsq_same(gtsq, gtsq, internal)
|
|
RETURNS internal
|
|
AS 'MODULE_PATHNAME'
|
|
LANGUAGE 'C';
|
|
|
|
CREATE OPERATOR CLASS gist_tp_tsquery_ops
|
|
DEFAULT FOR TYPE tsquery USING gist
|
|
AS
|
|
OPERATOR 1 @ (tsquery, tsquery) RECHECK,
|
|
OPERATOR 2 ~ (tsquery, tsquery) RECHECK,
|
|
FUNCTION 1 gtsq_consistent (gtsq, internal, int4),
|
|
FUNCTION 2 gtsq_union (bytea, internal),
|
|
FUNCTION 3 gtsq_compress (internal),
|
|
FUNCTION 4 gtsq_decompress (internal),
|
|
FUNCTION 5 gtsq_penalty (internal, internal, internal),
|
|
FUNCTION 6 gtsq_picksplit (internal, internal),
|
|
FUNCTION 7 gtsq_same (gtsq, gtsq, internal),
|
|
STORAGE gtsq;
|
|
|
|
--example of ISpell dictionary
|
|
--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';
|
|
--example of synonym dict
|
|
--update pg_ts_dict set dict_initoption='/usr/local/share/ispell/english.syn' where dict_id=5;
|
|
END;
|