Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
199
Issues
199
List
Board
Labels
Milestones
Merge Requests
12
Merge Requests
12
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
haskell-gargantext
Commits
9227265d
Commit
9227265d
authored
Jan 18, 2020
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[DB] optim cooc
parent
b2d3294c
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
83 additions
and
17 deletions
+83
-17
Flow.hs
src/Gargantext/Database/Flow.hs
+1
-1
Init.hs
src/Gargantext/Database/Init.hs
+11
-4
NodeNgrams.hs
src/Gargantext/Database/Schema/NodeNgrams.hs
+12
-12
NodesNodes.hs
src/Gargantext/Database/Triggers/NodesNodes.hs
+59
-0
No files found.
src/Gargantext/Database/Flow.hs
View file @
9227265d
...
...
@@ -259,7 +259,6 @@ insertMasterDocs c lang hs = do
let
ids'
=
map
reId
ids
documentsWithId
=
mergeData
(
toInserted
ids
)
(
Map
.
fromList
$
map
viewUniqId'
docs
)
_
<-
Doc
.
add
masterCorpusId
ids'
-- TODO
-- create a corpus with database name (CSV or PubMed)
-- add documents to the corpus (create node_node link)
...
...
@@ -288,6 +287,7 @@ insertMasterDocs c lang hs = do
,
(
nId
,
w
)
<-
Map
.
toList
mapNodeIdWeight
]
_
<-
Doc
.
add
masterCorpusId
ids'
_cooc
<-
mkNode
NodeListCooc
lId
masterUserId
-- to be removed
_
<-
insertDocNgrams
lId
indexedNgrams
...
...
src/Gargantext/Database/Init.hs
View file @
9227265d
...
...
@@ -23,8 +23,8 @@ module Gargantext.Database.Init
import
Gargantext.Database.Utils
(
Cmd
)
import
Gargantext.Prelude
import
Gargantext.Database.Triggers.Nodes
(
triggerSearchUpdate
)
import
Gargantext.Database.Triggers.NodesNodes
(
triggerDeleteCount
,
triggerInsertCount
,
triggerUpdateAdd
,
triggerUpdateDel
,
MasterListId
)
import
Gargantext.Database.Triggers.NodeNodeNgrams
(
triggerCountInsert
,
triggerCountInsert2
,
triggerCoocInsert
)
import
Gargantext.Database.Triggers.NodesNodes
(
triggerDeleteCount
,
triggerInsertCount
,
triggerUpdateAdd
,
triggerUpdateDel
,
MasterListId
,
triggerCoocInsert
)
import
Gargantext.Database.Triggers.NodeNodeNgrams
(
triggerCountInsert
,
triggerCountInsert2
)
------------------------------------------------------------------------
initTriggers
::
MasterListId
->
Cmd
err
[
Int64
]
...
...
@@ -32,11 +32,18 @@ initTriggers lId = do
t0
<-
triggerSearchUpdate
t1
<-
triggerCountInsert
t1'
<-
triggerCountInsert2
t1''
<-
triggerCoocInsert
t1''
<-
triggerCoocInsert
lId
t2
<-
triggerDeleteCount
lId
t3
<-
triggerInsertCount
lId
t4
<-
triggerUpdateAdd
lId
t5
<-
triggerUpdateDel
lId
pure
[
t0
,
t1
,
t1'
,
t1''
,
t2
,
t3
,
t4
,
t5
]
pure
[
t0
,
t1
,
t1'
,
t1''
,
t2
,
t3
,
t4
,
t5
]
src/Gargantext/Database/Schema/NodeNgrams.hs
View file @
9227265d
...
...
@@ -55,15 +55,15 @@ data NodeNgramsPoly id
ngrams_tag
ngrams_class
weight
=
NodeNgrams
{
_nng_id
::
id
,
_nng_node_id
::
node_id'
,
_nng_node_subtype
::
node_subtype
,
_nng_ngrams_id
::
ngrams_id
,
_nng_ngrams_type
::
ngrams_type
,
_nng_ngrams_field
::
ngrams_field
,
_nng_ngrams_tag
::
ngrams_tag
,
_nng_ngrams_class
::
ngrams_class
,
_nng_ngrams_weight
::
weight
=
NodeNgrams
{
_nng_id
::
!
id
,
_nng_node_id
::
!
node_id'
,
_nng_node_subtype
::
!
node_subtype
,
_nng_ngrams_id
::
!
ngrams_id
,
_nng_ngrams_type
::
!
ngrams_type
,
_nng_ngrams_field
::
!
ngrams_field
,
_nng_ngrams_tag
::
!
ngrams_tag
,
_nng_ngrams_class
::
!
ngrams_class
,
_nng_ngrams_weight
::
!
weight
}
deriving
(
Show
,
Eq
,
Ord
)
{-
...
...
@@ -113,9 +113,9 @@ type NodeNgramsW =
NgramsType
(
Maybe
NgramsField
)
(
Maybe
NgramsTag
)
(
Maybe
NgramsClass
)
Double
data
Returning
=
Returning
{
re_type
::
Maybe
NgramsType
,
re_terms
::
Text
,
re_ngrams_id
::
Int
data
Returning
=
Returning
{
re_type
::
!
(
Maybe
NgramsType
)
,
re_terms
::
!
Text
,
re_ngrams_id
::
!
Int
}
deriving
(
Show
)
...
...
src/Gargantext/Database/Triggers/NodesNodes.hs
View file @
9227265d
...
...
@@ -23,6 +23,7 @@ import Database.PostgreSQL.Simple.SqlQQ (sql)
-- import Database.PostgreSQL.Simple.Types (Values(..), QualifiedIdentifier(..))
import
Gargantext.Database.Config
(
nodeTypeId
)
import
Gargantext.Database.Types.Node
-- (ListId, CorpusId, NodeId)
import
Gargantext.Core.Types.Main
(
listTypeId
,
ListType
(
CandidateTerm
))
import
Gargantext.Database.Utils
(
Cmd
,
execPGSQuery
)
import
Gargantext.Prelude
import
qualified
Database.PostgreSQL.Simple
as
DPS
...
...
@@ -157,3 +158,61 @@ triggerUpdateDel lId = execPGSQuery query (lId, nodeTypeId NodeList)
|]
-- TODO add groups
triggerCoocInsert
::
MasterListId
->
Cmd
err
Int64
triggerCoocInsert
lid
=
execPGSQuery
query
(
lid
-- , nodeTypeId NodeCorpus
-- , nodeTypeId NodeDocument
-- , nodeTypeId NodeList
,
listTypeId
CandidateTerm
,
listTypeId
CandidateTerm
)
where
query
::
DPS
.
Query
query
=
[
sql
|
CREATE OR REPLACE FUNCTION nodes_nodes_set_cooc() RETURNS trigger AS $$
BEGIN
IF pg_trigger_depth() <> 1 THEN
RETURN NEW;
END IF;
IF TG_OP = 'INSERT' THEN
INSERT INTO node_nodengrams_nodengrams (node_id, node_ngrams1_id, node_ngrams2_id, weight)
WITH input(corpus_id, nn1, nn2, weight) AS (
SELECT new1.node1_id, nn1.id, nn2.id, count(*) from NEW as new1
INNER JOIN node_ngrams nn1
ON nn1.node_id = ? -- COALESCE(?,?) --(masterList, userList)
INNER JOIN node_ngrams nn2
ON nn2.node_id = nn1.node_id
INNER JOIN node_node_ngrams2 nnn1
ON nnn1.node_id = new1.node2_id
INNER JOIN node_node_ngrams2 nnn2
ON nnn2.node_id = new1.node2_id
WHERE nnn1.nodengrams_id = nn1.id
AND nnn2.nodengrams_id = nn2.id
AND nn1.id < nn2.id
AND nn1.node_subtype >= ?
AND nn2.node_subtype >= ?
GROUP BY new1.node1_id, nn1.id, nn2.id
)
SELECT * from input where weight >= 1
ON CONFLICT (node_id, node_ngrams1_id, node_ngrams2_id)
DO UPDATE set weight = node_nodengrams_nodengrams.weight + excluded.weight
;
END IF;
RETURN NULL;
END
$$ LANGUAGE plpgsql;
-- DROP trigger trigger_cooc on node_node_ngrams2;
CREATE TRIGGER trigger_cooc_insert AFTER INSERT on nodes_nodes
REFERENCING NEW TABLE AS NEW
FOR EACH STATEMENT
EXECUTE PROCEDURE nodes_nodes_set_cooc();
|]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment