feature #26: Add ZDB index to constitution, article and comment
This commit is contained in:
@@ -37,5 +37,5 @@ drop function if exists set_version_number();
|
|||||||
drop table if exists moderator;
|
drop table if exists moderator;
|
||||||
drop table if exists citizen_in_workgroup;
|
drop table if exists citizen_in_workgroup;
|
||||||
drop table if exists workgroup;
|
drop table if exists workgroup;
|
||||||
drop table if exists citizen;
|
drop table if exists citizen cascade;
|
||||||
drop table if exists "user";
|
drop table if exists "user";
|
||||||
|
|||||||
@@ -101,8 +101,8 @@ create table article
|
|||||||
version_number int not null,
|
version_number int not null,
|
||||||
title text not null check ( length(title) < 128 ),
|
title text not null check ( length(title) < 128 ),
|
||||||
anonymous boolean default false not null,
|
anonymous boolean default false not null,
|
||||||
content text not null check ( content != '' ),
|
content text not null check ( content != '' and length(content) < 4096 ),
|
||||||
description text null check ( description != '' ),
|
description text null check ( description != '' and length(description) < 4096 ),
|
||||||
tags varchar(32)[] default '{}' not null,
|
tags varchar(32)[] default '{}' not null,
|
||||||
deleted_at timestamptz default null null,
|
deleted_at timestamptz default null null,
|
||||||
unique (version_id, version_number)
|
unique (version_id, version_number)
|
||||||
@@ -122,6 +122,7 @@ create table constitution
|
|||||||
version_id uuid default uuid_generate_v4() not null,
|
version_id uuid default uuid_generate_v4() not null,
|
||||||
version_number int not null,
|
version_number int not null,
|
||||||
title text not null check ( length(title) < 128 ),
|
title text not null check ( length(title) < 128 ),
|
||||||
|
intro text null check ( length(intro) < 4096 ),
|
||||||
anonymous boolean default false not null,
|
anonymous boolean default false not null,
|
||||||
deleted_at timestamptz default null null,
|
deleted_at timestamptz default null null,
|
||||||
unique (version_id, version_number)
|
unique (version_id, version_number)
|
||||||
@@ -359,4 +360,200 @@ create table resource_view
|
|||||||
created_at timestamptz default now() not null,
|
created_at timestamptz default now() not null,
|
||||||
created_by_id uuid null references citizen (id),
|
created_by_id uuid null references citizen (id),
|
||||||
ip cidr null
|
ip cidr null
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--------------
|
||||||
|
-- ZOMBO DB --
|
||||||
|
--------------
|
||||||
|
|
||||||
|
-- Filter
|
||||||
|
SELECT zdb.define_filter('french_stop', '{
|
||||||
|
"type": "stop",
|
||||||
|
"stopwords": "_french_",
|
||||||
|
"ignore_case": true
|
||||||
|
}');
|
||||||
|
|
||||||
|
SELECT zdb.define_filter('french_elision', '{
|
||||||
|
"type": "elision",
|
||||||
|
"articles": [
|
||||||
|
"à",
|
||||||
|
"ainsi",
|
||||||
|
"alors",
|
||||||
|
"assez",
|
||||||
|
"au",
|
||||||
|
"aussi",
|
||||||
|
"aux",
|
||||||
|
"c",
|
||||||
|
"ça",
|
||||||
|
"car",
|
||||||
|
"ce",
|
||||||
|
"cela",
|
||||||
|
"ces",
|
||||||
|
"ceux",
|
||||||
|
"ci",
|
||||||
|
"celle",
|
||||||
|
"celles",
|
||||||
|
"d",
|
||||||
|
"de",
|
||||||
|
"déjà",
|
||||||
|
"depuis",
|
||||||
|
"des",
|
||||||
|
"donc",
|
||||||
|
"du",
|
||||||
|
"et",
|
||||||
|
"ici",
|
||||||
|
"l",
|
||||||
|
"la",
|
||||||
|
"là",
|
||||||
|
"le",
|
||||||
|
"les",
|
||||||
|
"leur",
|
||||||
|
"leurs",
|
||||||
|
"ma",
|
||||||
|
"mais",
|
||||||
|
"même",
|
||||||
|
"mes",
|
||||||
|
"mon",
|
||||||
|
"ne",
|
||||||
|
"ni",
|
||||||
|
"notre",
|
||||||
|
"nous",
|
||||||
|
"ou",
|
||||||
|
"où",
|
||||||
|
"s",
|
||||||
|
"sa",
|
||||||
|
"ses",
|
||||||
|
"son",
|
||||||
|
"t",
|
||||||
|
"ta",
|
||||||
|
"tant",
|
||||||
|
"tantôt",
|
||||||
|
"tels",
|
||||||
|
"tes",
|
||||||
|
"ton",
|
||||||
|
"tôt",
|
||||||
|
"toujours",
|
||||||
|
"trop",
|
||||||
|
"un",
|
||||||
|
"une",
|
||||||
|
"votre",
|
||||||
|
"vos"
|
||||||
|
],
|
||||||
|
"ignore_case": true
|
||||||
|
}');
|
||||||
|
|
||||||
|
SELECT zdb.define_filter('french_stemmer', '{
|
||||||
|
"type": "stemmer",
|
||||||
|
"language": "light_french"
|
||||||
|
}');
|
||||||
|
|
||||||
|
SELECT zdb.define_filter('worddelimiter', '{
|
||||||
|
"type": "word_delimiter"
|
||||||
|
}');
|
||||||
|
|
||||||
|
-- Tokenizer
|
||||||
|
SELECT zdb.define_tokenizer('ngram_tokenizer', '{
|
||||||
|
"type": "nGram",
|
||||||
|
"min_gram": 3,
|
||||||
|
"max_gram": 7,
|
||||||
|
"token_chars": ["letter", "digit"]
|
||||||
|
}');
|
||||||
|
|
||||||
|
-- Analyzer
|
||||||
|
SELECT zdb.define_analyzer('name_analyzer', '{
|
||||||
|
"type": "custom",
|
||||||
|
"tokenizer": "ngram_tokenizer",
|
||||||
|
"filter": ["lowercase", "asciifolding"]
|
||||||
|
}');
|
||||||
|
|
||||||
|
SELECT zdb.define_analyzer('fr_analyzer', '{
|
||||||
|
"tokenizer": "standard",
|
||||||
|
"filter": ["french_elision", "worddelimiter", "asciifolding", "lowercase", "french_stop", "french_stemmer"]
|
||||||
|
}');
|
||||||
|
|
||||||
|
-- INDEX article table
|
||||||
|
SELECT zdb.define_field_mapping('article', 'title', '{
|
||||||
|
"type": "text",
|
||||||
|
"analyzer": "fr_analyzer",
|
||||||
|
"search_analyzer": "fr_analyzer"
|
||||||
|
}');
|
||||||
|
|
||||||
|
SELECT zdb.define_field_mapping('article', 'content', '{
|
||||||
|
"type": "text",
|
||||||
|
"analyzer": "fr_analyzer",
|
||||||
|
"search_analyzer": "fr_analyzer"
|
||||||
|
}');
|
||||||
|
|
||||||
|
SELECT zdb.define_field_mapping('article', 'description', '{
|
||||||
|
"type": "text",
|
||||||
|
"analyzer": "fr_analyzer",
|
||||||
|
"search_analyzer": "fr_analyzer"
|
||||||
|
}');
|
||||||
|
|
||||||
|
CREATE INDEX article_idx
|
||||||
|
ON article
|
||||||
|
USING zombodb ((article.*))
|
||||||
|
WITH (ALIAS='article_idx');
|
||||||
|
|
||||||
|
REINDEX INDEX article_idx;
|
||||||
|
|
||||||
|
|
||||||
|
-- INDEX constitution table
|
||||||
|
SELECT zdb.define_field_mapping('constitution', 'title', '{
|
||||||
|
"type": "text",
|
||||||
|
"analyzer": "fr_analyzer",
|
||||||
|
"search_analyzer": "fr_analyzer"
|
||||||
|
}');
|
||||||
|
|
||||||
|
SELECT zdb.define_field_mapping('constitution', 'intro', '{
|
||||||
|
"type": "text",
|
||||||
|
"analyzer": "fr_analyzer",
|
||||||
|
"search_analyzer": "fr_analyzer"
|
||||||
|
}');
|
||||||
|
|
||||||
|
CREATE INDEX constitution_idx
|
||||||
|
ON constitution
|
||||||
|
USING zombodb ((constitution.*))
|
||||||
|
WITH (ALIAS='constitution_idx');
|
||||||
|
|
||||||
|
REINDEX INDEX constitution_idx;
|
||||||
|
|
||||||
|
|
||||||
|
-- INDEX coment table
|
||||||
|
SELECT zdb.define_field_mapping('comment', 'content', '{
|
||||||
|
"type": "text",
|
||||||
|
"analyzer": "fr_analyzer",
|
||||||
|
"search_analyzer": "fr_analyzer"
|
||||||
|
}');
|
||||||
|
|
||||||
|
CREATE INDEX comment_idx
|
||||||
|
ON comment
|
||||||
|
USING zombodb ((comment.*))
|
||||||
|
WITH (ALIAS='comment_idx');
|
||||||
|
|
||||||
|
REINDEX INDEX comment_idx;
|
||||||
|
|
||||||
|
|
||||||
|
-- INDEX citizen table
|
||||||
|
SELECT zdb.define_field_mapping('citizen', 'first_name', '{
|
||||||
|
"type": "text",
|
||||||
|
"analyzer": "name_analyzer",
|
||||||
|
"search_analyzer": "name_analyzer"
|
||||||
|
}');
|
||||||
|
|
||||||
|
SELECT zdb.define_field_mapping('citizen', 'last_name', '{
|
||||||
|
"type": "text",
|
||||||
|
"analyzer": "name_analyzer",
|
||||||
|
"search_analyzer": "name_analyzer"
|
||||||
|
}');
|
||||||
|
|
||||||
|
CREATE INDEX citizen_idx
|
||||||
|
ON citizen
|
||||||
|
USING zombodb ((citizen.*))
|
||||||
|
WITH (ALIAS='citizen_idx');
|
||||||
|
|
||||||
|
REINDEX INDEX citizen_idx;
|
||||||
Reference in New Issue
Block a user