diff --git a/bin/gargantext-upgrade/Main.hs b/bin/gargantext-upgrade/Main.hs index 7a321ea0d20d90ea4fd9f66817bbd855a7d2a266..17f4f5fab54fc4db1006d35a4d286e2659167714 100644 --- a/bin/gargantext-upgrade/Main.hs +++ b/bin/gargantext-upgrade/Main.hs @@ -79,7 +79,7 @@ main = do refreshIndex :: Cmd'' DevEnv IOException () refreshIndex = do - _ <- execPGSQuery [sql| REFRESH MATERIALIZED VIEW context_node_ngrams_view; |] () + _ <- execPGSQuery [sql| REFRESH MATERIALIZED VIEW CONCURRENTLY context_node_ngrams_view; |] () pure () addIndex :: Cmd'' DevEnv IOException Int64 @@ -87,15 +87,24 @@ addIndex = do execPGSQuery query () where query = [sql| - create materialized view if not exists context_node_ngrams_view as - select context_node_ngrams.context_id, ngrams_id, nodes_contexts.node_id - from nodes_contexts - join context_node_ngrams - on context_node_ngrams.context_id = nodes_contexts.context_id; - - create index if not exists context_node_ngrams_context_id_ngrams_id_idx on context_node_ngrams(context_id, ngrams_id); - create index if not exists context_node_ngrams_view_context_id_idx on context_node_ngrams_view(context_id); - create index if not exists context_node_ngrams_view_ngrams_id_idx on context_node_ngrams_view(ngrams_id); - create index if not exists context_node_ngrams_view_node_id_idx on context_node_ngrams_view(node_id); - create index if not exists node_stories_ngrams_id_idx on node_stories(ngrams_id); + CREATE MATERIALIZED VIEW IF NOT EXISTS context_node_ngrams_view AS + SELECT DISTINCT context_node_ngrams.context_id, ngrams_id, nodes_contexts.node_id + FROM nodes_contexts + JOIN context_node_ngrams + ON context_node_ngrams.context_id = nodes_contexts.context_id; + + CREATE INDEX IF NOT EXISTS context_node_ngrams_context_id_ngrams_id_idx + ON context_node_ngrams(context_id, ngrams_id); + + CREATE INDEX IF NOT EXISTS context_node_ngrams_view_context_id_idx + ON context_node_ngrams_view(context_id); + CREATE INDEX IF NOT EXISTS context_node_ngrams_view_ngrams_id_idx + ON context_node_ngrams_view(ngrams_id); + CREATE INDEX IF NOT EXISTS context_node_ngrams_view_node_id_idx + ON context_node_ngrams_view(node_id); + CREATE UNIQUE INDEX IF NOT EXISTS context_node_ngrams_view_context_ngrams_node_uniq_idx + ON context_node_ngrams_view (context_id, ngrams_id, node_id); + + CREATE INDEX IF NOT EXISTS node_stories_ngrams_id_idx + ON node_stories(ngrams_id); |] diff --git a/devops/postgres/schema.sql b/devops/postgres/schema.sql index 6e4c427aa54792833d96619f2b475125c0ac2b05..bc136dd07fa08c764bb000aff54344ea7857344a 100644 --- a/devops/postgres/schema.sql +++ b/devops/postgres/schema.sql @@ -337,14 +337,23 @@ CREATE OR REPLACE function node_pos(int, int) returns bigint --create index node_by_pos on nodes using btree(node_pos(id,typename)); -- Optimization for Ngrams Table View -create materialized view if not exists context_node_ngrams_view as -select context_node_ngrams.context_id, ngrams_id, nodes_contexts.node_id -from nodes_contexts -join context_node_ngrams -on context_node_ngrams.context_id = nodes_contexts.context_id; - -create index if not exists context_node_ngrams_context_id_ngrams_id_idx on context_node_ngrams(context_id, ngrams_id); -create index if not exists context_node_ngrams_view_context_id_idx on context_node_ngrams_view(context_id); -create index if not exists context_node_ngrams_view_ngrams_id_idx on context_node_ngrams_view(ngrams_id); -create index if not exists context_node_ngrams_view_node_id_idx on context_node_ngrams_view(node_id); -create index if not exists node_stories_ngrams_id_idx on node_stories(ngrams_id); +CREATE MATERIALIZED VIEW IF NOT EXISTS context_node_ngrams_view AS + SELECT DISTINCT context_node_ngrams.context_id, ngrams_id, nodes_contexts.node_id + FROM nodes_contexts + JOIN context_node_ngrams + ON context_node_ngrams.context_id = nodes_contexts.context_id; + +CREATE INDEX IF NOT EXISTS context_node_ngrams_context_id_ngrams_id_idx + ON context_node_ngrams(context_id, ngrams_id); + +CREATE INDEX IF NOT EXISTS context_node_ngrams_view_context_id_idx + ON context_node_ngrams_view(context_id); +CREATE INDEX IF NOT EXISTS context_node_ngrams_view_ngrams_id_idx + ON context_node_ngrams_view(ngrams_id); +CREATE INDEX IF NOT EXISTS context_node_ngrams_view_node_id_idx + ON context_node_ngrams_view(node_id); +CREATE UNIQUE INDEX IF NOT EXISTS context_node_ngrams_view_context_ngrams_node_uniq_idx + ON context_node_ngrams_view (context_id, ngrams_id, node_id); + +CREATE INDEX IF NOT EXISTS node_stories_ngrams_id_idx + ON node_stories(ngrams_id);