Files
2025-06-17 11:53:18 +02:00

456 lines
13 KiB
PL/PgSQL

--
-- Table structure for table `#__finder_filters`
--
CREATE TABLE IF NOT EXISTS "#__finder_filters" (
"filter_id" serial NOT NULL,
"title" varchar(255) NOT NULL,
"alias" varchar(255) NOT NULL,
"state" smallint DEFAULT 1 NOT NULL,
"created" timestamp without time zone NOT NULL,
"created_by" integer DEFAULT 0 NOT NULL,
"created_by_alias" varchar(255) DEFAULT '' NOT NULL,
"modified" timestamp without time zone NOT NULL,
"modified_by" integer DEFAULT 0 NOT NULL,
"checked_out" integer DEFAULT 0 NOT NULL,
"checked_out_time" timestamp without time zone,
"map_count" integer DEFAULT 0 NOT NULL,
"data" text,
"params" text,
PRIMARY KEY ("filter_id")
);
--
-- Table structure for table `#__finder_links`
--
CREATE TABLE IF NOT EXISTS "#__finder_links" (
"link_id" serial NOT NULL,
"url" varchar(255) NOT NULL,
"route" varchar(255) NOT NULL,
"title" varchar(400) DEFAULT NULL,
"description" text,
"indexdate" timestamp without time zone NOT NULL,
"md5sum" varchar(32) DEFAULT NULL,
"published" smallint DEFAULT 1 NOT NULL,
"state" integer DEFAULT 1 NOT NULL,
"access" integer DEFAULT 0 NOT NULL,
"language" varchar(7) DEFAULT '' NOT NULL,
"publish_start_date" timestamp without time zone,
"publish_end_date" timestamp without time zone,
"start_date" timestamp without time zone,
"end_date" timestamp without time zone,
"list_price" numeric(8,2) DEFAULT 0 NOT NULL,
"sale_price" numeric(8,2) DEFAULT 0 NOT NULL,
"type_id" bigint NOT NULL,
"object" bytea,
PRIMARY KEY ("link_id")
);
CREATE INDEX "#__finder_links_idx_type" on "#__finder_links" ("type_id");
CREATE INDEX "#__finder_links_idx_title" on "#__finder_links" ("title");
CREATE INDEX "#__finder_links_idx_md5" on "#__finder_links" ("md5sum");
CREATE INDEX "#__finder_links_idx_language" on "#__finder_links" ("language");
CREATE INDEX "#__finder_links_idx_url" on "#__finder_links" (substr(url,0,76));
CREATE INDEX "#__finder_links_idx_published_list" on "#__finder_links" ("published", "state", "access", "publish_start_date", "publish_end_date", "list_price");
CREATE INDEX "#__finder_links_idx_published_sale" on "#__finder_links" ("published", "state", "access", "publish_start_date", "publish_end_date", "sale_price");
--
-- Table structure for table `#__finder_links_terms`
--
CREATE TABLE IF NOT EXISTS "#__finder_links_terms" (
"link_id" integer NOT NULL,
"term_id" integer NOT NULL,
"weight" numeric(8,2) DEFAULT 0 NOT NULL,
PRIMARY KEY ("link_id", "term_id")
);
CREATE INDEX "#__finder_links_terms_idx_term_weight" on "#__finder_links_terms" ("term_id", "weight");
CREATE INDEX "#__finder_links_terms_idx_link_term_weight" on "#__finder_links_terms" ("link_id", "term_id", "weight");
--
-- Table structure for table `#__finder_logging`
--
CREATE TABLE IF NOT EXISTS "#__finder_logging" (
"searchterm" character varying(255) NOT NULL DEFAULT '',
"md5sum" character varying(32) NOT NULL DEFAULT '',
"query" bytea NOT NULL,
"hits" integer NOT NULL DEFAULT 1,
"results" integer NOT NULL DEFAULT 0,
PRIMARY KEY ("md5sum")
);
CREATE INDEX "#__finder_logging_idx_md5sum" on "#__finder_logging" ("md5sum");
CREATE INDEX "#__finder_logging_idx_searchterm" on "#__finder_logging" ("searchterm");
--
-- Table structure for table `#__finder_taxonomy`
--
CREATE TABLE IF NOT EXISTS "#__finder_taxonomy" (
"id" serial NOT NULL,
"parent_id" integer DEFAULT 0 NOT NULL,
"lft" integer DEFAULT 0 NOT NULL,
"rgt" integer DEFAULT 0 NOT NULL,
"level" integer DEFAULT 0 NOT NULL,
"path" VARCHAR(400) NOT NULL DEFAULT '',
"title" VARCHAR(255) NOT NULL DEFAULT '',
"alias" VARCHAR(400) NOT NULL DEFAULT '',
"state" smallint DEFAULT 1 NOT NULL,
"access" smallint DEFAULT 1 NOT NULL,
"language" varchar(7) DEFAULT '' NOT NULL,
PRIMARY KEY ("id")
);
CREATE INDEX "#__finder_taxonomy_state" on "#__finder_taxonomy" ("state");
CREATE INDEX "#__finder_taxonomy_access" on "#__finder_taxonomy" ("access");
CREATE INDEX "#__finder_taxonomy_path" on "#__finder_taxonomy" ("path");
CREATE INDEX "#__finder_taxonomy_lft_rgt" on "#__finder_taxonomy" ("lft", "rgt");
CREATE INDEX "#__finder_taxonomy_alias" on "#__finder_taxonomy" ("alias");
CREATE INDEX "#__finder_taxonomy_language" on "#__finder_taxonomy" ("language");
CREATE INDEX "#__finder_taxonomy_idx_parent_published" on "#__finder_taxonomy" ("parent_id", "state", "access");
--
-- Dumping data for table `#__finder_taxonomy`
--
INSERT INTO "#__finder_taxonomy" ("id", "parent_id", "lft", "rgt", "level", "path", "title", "alias", "state", "access", "language") VALUES
(1, 0, 0, 1, 0, '', 'ROOT', 'root', 1, 1, '*');
SELECT setval('#__finder_taxonomy_id_seq', 2, false);
--
-- Table structure for table `#__finder_taxonomy_map`
--
CREATE TABLE IF NOT EXISTS "#__finder_taxonomy_map" (
"link_id" integer NOT NULL,
"node_id" integer NOT NULL,
PRIMARY KEY ("link_id", "node_id")
);
CREATE INDEX "#__finder_taxonomy_map_link_id" on "#__finder_taxonomy_map" ("link_id");
CREATE INDEX "#__finder_taxonomy_map_node_id" on "#__finder_taxonomy_map" ("node_id");
--
-- Table structure for table `#__finder_terms`
--
CREATE TABLE IF NOT EXISTS "#__finder_terms" (
"term_id" serial NOT NULL,
"term" varchar(75) NOT NULL,
"stem" varchar(75) DEFAULT '' NOT NULL,
"common" smallint DEFAULT 0 NOT NULL,
"phrase" smallint DEFAULT 0 NOT NULL,
"weight" numeric(8,2) DEFAULT 0 NOT NULL,
"soundex" varchar(75) DEFAULT '' NOT NULL,
"links" integer DEFAULT 0 NOT NULL,
"language" varchar(7) DEFAULT '' NOT NULL,
PRIMARY KEY ("term_id"),
CONSTRAINT "#__finder_terms_idx_term_language" UNIQUE ("term", "language")
);
CREATE INDEX "#__finder_terms_idx_term_phrase" on "#__finder_terms" ("term", "phrase");
CREATE INDEX "#__finder_terms_idx_stem_phrase" on "#__finder_terms" ("stem", "phrase");
CREATE INDEX "#__finder_terms_idx_soundex_phrase" on "#__finder_terms" ("soundex", "phrase");
CREATE INDEX "#__finder_terms_idx_language" on "#__finder_terms" ("language");
--
-- Table structure for table `#__finder_terms_common`
--
CREATE TABLE IF NOT EXISTS "#__finder_terms_common" (
"term" varchar(75) NOT NULL,
"language" varchar(7) DEFAULT '' NOT NULL,
"custom" integer DEFAULT 0 NOT NULL,
CONSTRAINT "#__finder_terms_common_idx_term_language" UNIQUE ("term", "language")
);
CREATE INDEX "#__finder_terms_common_idx_lang" on "#__finder_terms_common" ("language");
--
-- Dumping data for table `#__finder_terms_common`
--
INSERT INTO "#__finder_terms_common" ("term", "language", "custom") VALUES
('i', 'en', 0),
('me', 'en', 0),
('my', 'en', 0),
('myself', 'en', 0),
('we', 'en', 0),
('our', 'en', 0),
('ours', 'en', 0),
('ourselves', 'en', 0),
('you', 'en', 0),
('your', 'en', 0),
('yours', 'en', 0),
('yourself', 'en', 0),
('yourselves', 'en', 0),
('he', 'en', 0),
('him', 'en', 0),
('his', 'en', 0),
('himself', 'en', 0),
('she', 'en', 0),
('her', 'en', 0),
('hers', 'en', 0),
('herself', 'en', 0),
('it', 'en', 0),
('its', 'en', 0),
('itself', 'en', 0),
('they', 'en', 0),
('them', 'en', 0),
('their', 'en', 0),
('theirs', 'en', 0),
('themselves', 'en', 0),
('what', 'en', 0),
('which', 'en', 0),
('who', 'en', 0),
('whom', 'en', 0),
('this', 'en', 0),
('that', 'en', 0),
('these', 'en', 0),
('those', 'en', 0),
('am', 'en', 0),
('is', 'en', 0),
('are', 'en', 0),
('was', 'en', 0),
('were', 'en', 0),
('be', 'en', 0),
('been', 'en', 0),
('being', 'en', 0),
('have', 'en', 0),
('has', 'en', 0),
('had', 'en', 0),
('having', 'en', 0),
('do', 'en', 0),
('does', 'en', 0),
('did', 'en', 0),
('doing', 'en', 0),
('would', 'en', 0),
('should', 'en', 0),
('could', 'en', 0),
('ought', 'en', 0),
('i''m', 'en', 0),
('you''re', 'en', 0),
('he''s', 'en', 0),
('she''s', 'en', 0),
('it''s', 'en', 0),
('we''re', 'en', 0),
('they''re', 'en', 0),
('i''ve', 'en', 0),
('you''ve', 'en', 0),
('we''ve', 'en', 0),
('they''ve', 'en', 0),
('i''d', 'en', 0),
('you''d', 'en', 0),
('he''d', 'en', 0),
('she''d', 'en', 0),
('we''d', 'en', 0),
('they''d', 'en', 0),
('i''ll', 'en', 0),
('you''ll', 'en', 0),
('he''ll', 'en', 0),
('she''ll', 'en', 0),
('we''ll', 'en', 0),
('they''ll', 'en', 0),
('isn''t', 'en', 0),
('aren''t', 'en', 0),
('wasn''t', 'en', 0),
('weren''t', 'en', 0),
('hasn''t', 'en', 0),
('haven''t', 'en', 0),
('hadn''t', 'en', 0),
('doesn''t', 'en', 0),
('don''t', 'en', 0),
('didn''t', 'en', 0),
('won''t', 'en', 0),
('wouldn''t', 'en', 0),
('shan''t', 'en', 0),
('shouldn''t', 'en', 0),
('can''t', 'en', 0),
('cannot', 'en', 0),
('couldn''t', 'en', 0),
('mustn''t', 'en', 0),
('let''s', 'en', 0),
('that''s', 'en', 0),
('who''s', 'en', 0),
('what''s', 'en', 0),
('here''s', 'en', 0),
('there''s', 'en', 0),
('when''s', 'en', 0),
('where''s', 'en', 0),
('why''s', 'en', 0),
('how''s', 'en', 0),
('a', 'en', 0),
('an', 'en', 0),
('the', 'en', 0),
('and', 'en', 0),
('but', 'en', 0),
('if', 'en', 0),
('or', 'en', 0),
('because', 'en', 0),
('as', 'en', 0),
('until', 'en', 0),
('while', 'en', 0),
('of', 'en', 0),
('at', 'en', 0),
('by', 'en', 0),
('for', 'en', 0),
('with', 'en', 0),
('about', 'en', 0),
('against', 'en', 0),
('between', 'en', 0),
('into', 'en', 0),
('through', 'en', 0),
('during', 'en', 0),
('before', 'en', 0),
('after', 'en', 0),
('above', 'en', 0),
('below', 'en', 0),
('to', 'en', 0),
('from', 'en', 0),
('up', 'en', 0),
('down', 'en', 0),
('in', 'en', 0),
('out', 'en', 0),
('on', 'en', 0),
('off', 'en', 0),
('over', 'en', 0),
('under', 'en', 0),
('again', 'en', 0),
('further', 'en', 0),
('then', 'en', 0),
('once', 'en', 0),
('here', 'en', 0),
('there', 'en', 0),
('when', 'en', 0),
('where', 'en', 0),
('why', 'en', 0),
('how', 'en', 0),
('all', 'en', 0),
('any', 'en', 0),
('both', 'en', 0),
('each', 'en', 0),
('few', 'en', 0),
('more', 'en', 0),
('most', 'en', 0),
('other', 'en', 0),
('some', 'en', 0),
('such', 'en', 0),
('no', 'en', 0),
('nor', 'en', 0),
('not', 'en', 0),
('only', 'en', 0),
('own', 'en', 0),
('same', 'en', 0),
('so', 'en', 0),
('than', 'en', 0),
('too', 'en', 0),
('very', 'en', 0);
--
-- Table structure for table `#__finder_tokens`
--
CREATE TABLE IF NOT EXISTS "#__finder_tokens" (
"term" varchar(75) NOT NULL,
"stem" varchar(75) DEFAULT '' NOT NULL,
"common" smallint DEFAULT 0 NOT NULL,
"phrase" smallint DEFAULT 0 NOT NULL,
"weight" numeric(8,2) DEFAULT 1 NOT NULL,
"context" smallint DEFAULT 2 NOT NULL,
"language" varchar(7) DEFAULT '' NOT NULL
);
CREATE INDEX "#__finder_tokens_idx_word" on "#__finder_tokens" ("term");
CREATE INDEX "#__finder_tokens_idx_stem" on "#__finder_tokens" ("stem");
CREATE INDEX "#__finder_tokens_idx_context" on "#__finder_tokens" ("context");
CREATE INDEX "#__finder_tokens_idx_language" on "#__finder_tokens" ("language");
--
-- Table structure for table `#__finder_tokens_aggregate`
--
CREATE TABLE IF NOT EXISTS "#__finder_tokens_aggregate" (
"term_id" integer NOT NULL,
"term" varchar(75) NOT NULL,
"stem" varchar(75) DEFAULT '' NOT NULL,
"common" smallint DEFAULT 0 NOT NULL,
"phrase" smallint DEFAULT 0 NOT NULL,
"term_weight" numeric(8,2) NOT NULL DEFAULT 0,
"context" smallint DEFAULT 2 NOT NULL,
"context_weight" numeric(8,2) NOT NULL DEFAULT 0,
"total_weight" numeric(8,2) NOT NULL DEFAULT 0,
"language" varchar(7) DEFAULT '' NOT NULL
);
CREATE INDEX "#__finder_tokens_aggregate_token" on "#__finder_tokens_aggregate" ("term");
CREATE INDEX "_#__finder_tokens_aggregate_keyword_id" on "#__finder_tokens_aggregate" ("term_id");
--
-- Table structure for table `#__finder_types`
--
CREATE TABLE IF NOT EXISTS "#__finder_types" (
"id" serial NOT NULL,
"title" varchar(100) NOT NULL,
"mime" varchar(100) DEFAULT '' NOT NULL,
PRIMARY KEY ("id"),
CONSTRAINT "#__finder_types_title" UNIQUE ("title")
);
--
-- Here is SOUNDEX replacement for those who can't enable fuzzystrmatch module
-- from contrib folder.
-- This function comes from https://wiki.postgresql.org/wiki/Soundex
-- and is distributed with GPL license.
-- Thanks to its author, Marti Raudsepp, that published this piece of code.
--
CREATE OR REPLACE FUNCTION soundex(input text) RETURNS text
IMMUTABLE STRICT COST 500 LANGUAGE plpgsql
AS $$
DECLARE
soundex text = '';
char text;
symbol text;
last_symbol text = '';
pos int = 1;
BEGIN
WHILE length(soundex) < 4 LOOP
char = upper(substr(input, pos, 1));
pos = pos + 1;
CASE char
WHEN '' THEN
-- End of input string
IF soundex = '' THEN
RETURN '';
ELSE
RETURN rpad(soundex, 4, '0');
END IF;
WHEN 'B', 'F', 'P', 'V' THEN
symbol = '1';
WHEN 'C', 'G', 'J', 'K', 'Q', 'S', 'X', 'Z' THEN
symbol = '2';
WHEN 'D', 'T' THEN
symbol = '3';
WHEN 'L' THEN
symbol = '4';
WHEN 'M', 'N' THEN
symbol = '5';
WHEN 'R' THEN
symbol = '6';
ELSE
-- Not a consonant; no output, but next similar consonant will be re-recorded
symbol = '';
END CASE;
IF soundex = '' THEN
-- First character; only accept strictly English ASCII characters
IF char ~>=~ 'A' AND char ~<=~ 'Z' THEN
soundex = char;
last_symbol = symbol;
END IF;
ELSIF last_symbol != symbol THEN
soundex = soundex || symbol;
last_symbol = symbol;
END IF;
END LOOP;
RETURN soundex;
END;
$$;