Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
Przemyslaw Kaminski
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
Hide 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