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
195
Issues
195
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
1114fe2d
Commit
1114fe2d
authored
Dec 23, 2019
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[DB] Node_NodeNgrams_NodeNgrams
parent
ba75f548
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
131 additions
and
8 deletions
+131
-8
NodeNgrams.hs
src/Gargantext/Database/Schema/NodeNgrams.hs
+11
-8
Node_NodeNgrams_NodeNgrams.hs
src/Gargantext/Database/Schema/Node_NodeNgrams_NodeNgrams.hs
+120
-0
No files found.
src/Gargantext/Database/Schema/NodeNgrams.hs
View file @
1114fe2d
...
...
@@ -7,7 +7,8 @@ Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
NodeNgrams: mainly NodeList and its ngrams.
NodeNgrams register Context of Ngrams (named Cgrams then)
-}
...
...
@@ -35,7 +36,6 @@ import Database.PostgreSQL.Simple.SqlQQ (sql)
import
Data.Maybe
(
Maybe
,
fromMaybe
)
import
Gargantext.Core.Types
import
Gargantext.Database.Utils
import
Gargantext.Database.Config
(
nodeTypeId
)
import
Gargantext.Database.Schema.Ngrams
(
NgramsType
,
NgramsTypeId
,
ngramsTypeId
)
import
Gargantext.Prelude
...
...
@@ -105,21 +105,23 @@ type NodeNgramsW =
NgramsType
(
Maybe
NgramsField
)
(
Maybe
NgramsTag
)
(
Maybe
NgramsClass
)
Double
data
Result
=
Result
{
unResult
::
Int
}
data
Returning
=
Returning
{
re_terms
::
Text
,
re_ngrams_id
::
Int
}
deriving
(
Show
)
instance
FromRow
Re
sult
where
fromRow
=
Re
sult
<$
>
field
instance
FromRow
Re
turning
where
fromRow
=
Re
turning
<$>
field
<*
>
field
-- insertDb :: ListId -> Map NgramsType [NgramsElemet] -> Cmd err [Result]
listInsertDb
::
ListId
->
(
ListId
->
a
->
[
NodeNgramsW
])
->
a
->
Cmd
err
[
Re
sult
]
->
Cmd
err
[
Re
turning
]
listInsertDb
l
f
ngs
=
insertNodeNgrams
(
f
l
ngs
)
-- TODO optimize with size of ngrams
insertNodeNgrams
::
[
NodeNgramsW
]
->
Cmd
err
[
Re
sult
]
insertNodeNgrams
::
[
NodeNgramsW
]
->
Cmd
err
[
Re
turning
]
insertNodeNgrams
nns
=
runPGSQuery
query
(
PGS
.
Only
$
Values
fields
nns'
)
where
fields
=
map
(
\
t
->
QualifiedIdentifier
Nothing
t
)
[
"int4"
,
"int4"
,
"text"
,
"int4"
...
...
@@ -140,10 +142,11 @@ insertNodeNgrams nns = runPGSQuery query (PGS.Only $ Values fields nns')
query
::
PGS
.
Query
query
=
[
sql
|
INSERT INTO node_ngrams_ngrams VALUES (node_id, node_type, ngrams_id, ngrams_type, ngrams_field, ngrams_tag, ngrams_class, weight)
INSERT INTO node_ngrams_ngrams
nnn
VALUES (node_id, node_type, ngrams_id, ngrams_type, ngrams_field, ngrams_tag, ngrams_class, weight)
SELECT n.node_id, n.node_type, ng.ngrams_id, n.ngrams_type, n.ngrams_field, n.ngrams_tag, n.ngrams_class, n.weight FROM (?)
AS n(node_id, node_type, ngrams_terms, ngrams_type, ngrams_field, ngrams_tag, ngrams_class, weight)
INNER JOIN ngrams as ng ON ng.terms = n.ngrams_terms
ON CONFLICT(node_id, ngrams_id)
DO UPDATE SET node_type = excluded.node_type, ngrams_type = excluded.ngrams_type, ngrams_field = excluded.ngrams_field, ngrams_tag = excluded.ngrams_tag, ngrams_class = excluded.ngrams_class, weight = excluded.weight
RETURNING nnn.id, n.ngrams_terms
|]
src/Gargantext/Database/Schema/Node
Ngrams
Ngrams.hs
→
src/Gargantext/Database/Schema/Node
_NodeNgrams_Node
Ngrams.hs
View file @
1114fe2d
{-|
Module : Gargantext.Database.Schema.Node
Ngrams
Ngrams
Module : Gargantext.Database.Schema.Node
_NodeNgrams_Node
Ngrams
Description :
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -7,10 +7,13 @@ Maintainer : team@gargantext.org
Stability : experimental
Portability : POSIX
NodeNgramsNgrams table is used to group Ngrams
- NodeId :: List Id
- NgramId_1, NgramId_2 where all NgramId_2 will be added to NgramId_1
- weight: probability of the relation (TODO, fixed to 1 for simple stemming)
lgrams: listed ngrams
Node_NodeNgrams_NodeNgrams table is used to group ngrams
- first NodeId :: Referential / space node (corpus)
- NodeNgrams where Node is List
- lgrams1_id, lgrams2_id where all lgrams2_id will be added to lgrams1_id
- weight: score the relation
Next Step benchmark:
- recursive queries of postgres
...
...
@@ -29,7 +32,7 @@ Next Step benchmark:
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module
Gargantext.Database.Schema.Node
Ngrams
Ngrams
module
Gargantext.Database.Schema.Node
_NodeNgrams_Node
Ngrams
where
import
Control.Lens
(
view
)
...
...
@@ -38,60 +41,61 @@ import Control.Monad.IO.Class (liftIO)
import
Data.Maybe
(
Maybe
)
import
Data.Profunctor.Product.TH
(
makeAdaptorAndInstance
)
import
Gargantext.Database.Utils
(
Cmd
,
runOpaQuery
,
connection
)
import
Gargantext.Database.Types.Node
(
List
Id
)
import
Gargantext.Database.Types.Node
(
Corpus
Id
)
import
Gargantext.Database.Schema.Node
(
pgNodeId
)
import
Gargantext.Prelude
import
Opaleye
data
NodeNgramsNgramsPoly
node_id
ngram1_id
ngram2_id
weight
=
NodeNgramsNgrams
{
_nng_NodeId
::
node_id
,
_nng_Ngram1Id
::
ngram1_id
,
_nng_Ngram2Id
::
ngram2_id
,
_nng_Weight
::
weight
}
deriving
(
Show
)
type
NodeNgramsNgramsWrite
=
NodeNgramsNgramsPoly
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Maybe
(
Column
PGFloat8
))
type
NodeNgramsNgramsRead
=
NodeNgramsNgramsPoly
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Column
PGFloat8
)
type
NodeNgramsNgrams
=
NodeNgramsNgramsPoly
ListId
Int
Int
(
Maybe
Double
)
$
(
makeAdaptorAndInstance
"pNodeNgramsNgrams"
''
N
odeNgramsNgramsPoly
)
data
Node_NodeNgrams_NodeNgrams_Poly
node_id
nng1_id
nng2_id
weight
=
Node_NodeNgrams_NodeNgrams
{
_nnn_node_id
::
node_id
,
_nnn_nng1_id
::
nng1_id
,
_nnn_nng2_id
::
nng2_id
,
_nnn_weight
::
weight
}
deriving
(
Show
)
type
Node_NodeNgrams_NodeNgrams_Write
=
Node_NodeNgrams_NodeNgrams_Poly
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Maybe
(
Column
PGFloat8
))
type
Node_NodeNgrams_NodeNgrams_Read
=
Node_NodeNgrams_NodeNgrams_Poly
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Column
PGFloat8
)
type
ListNgramsId
=
Int
type
Node_NodeNgrams_NodeNgrams
=
Node_NodeNgrams_NodeNgrams_Poly
CorpusId
ListNgramsId
ListNgramsId
(
Maybe
Double
)
$
(
makeAdaptorAndInstance
"pNode_NodeNgrams_NodeNgrams"
''
N
ode_NodeNgrams_NodeNgrams_Poly
)
$
(
makeLensesWith
abbreviatedFields
''
N
ode
NgramsNgrams
Poly
)
''
N
ode
_NodeNgrams_NodeNgrams_
Poly
)
node
NgramsNgramsTable
::
Table
NodeNgramsNgramsWrite
NodeNgramsNgrams
Read
node
NgramsNgramsTable
=
Table
"nodes_n
grams_
ngrams"
(
pNode
NgramsNgrams
NodeNgrams
Ngrams
{
_nn
g_NodeId
=
required
"node_id"
,
_nn
g_Ngram1Id
=
required
"ngram
1_id"
,
_nn
g_Ngram2Id
=
required
"ngram
2_id"
,
_nn
g_Weight
=
optional
"weight"
node
_NodeNgrams_NodeNgrams_Table
::
Table
Node_NodeNgrams_NodeNgrams_Write
Node_NodeNgrams_NodeNgrams_
Read
node
_NodeNgrams_NodeNgrams_Table
=
Table
"nodes_n
odengrams_node
ngrams"
(
pNode
_NodeNgrams_NodeNgrams
Node_NodeNgrams_Node
Ngrams
{
_nn
n_node_id
=
required
"node_id"
,
_nn
n_nng1_id
=
required
"nng
1_id"
,
_nn
n_nng2_id
=
required
"nng
2_id"
,
_nn
n_weight
=
optional
"weight"
}
)
queryNode
NgramsNgramsTable
::
Query
NodeNgramsNgrams
Read
queryNode
NgramsNgramsTable
=
queryTable
nodeNgramsNgrams
Table
queryNode
_NodeNgrams_NodeNgrams_Table
::
Query
Node_NodeNgrams_NodeNgrams_
Read
queryNode
_NodeNgrams_NodeNgrams_Table
=
queryTable
node_NodeNgrams_NodeNgrams_
Table
-- | Select NodeNgramsNgrams
-- TODO not optimized (get all ngrams without filters)
node
NgramsNgrams
::
Cmd
err
[
NodeNgrams
Ngrams
]
node
NgramsNgrams
=
runOpaQuery
queryNodeNgramsNgrams
Table
node
_Node_NodeNgrams_NodeNgrams
::
Cmd
err
[
Node_NodeNgrams_Node
Ngrams
]
node
_Node_NodeNgrams_NodeNgrams
=
runOpaQuery
queryNode_NodeNgrams_NodeNgrams_
Table
instance
QueryRunnerColumnDefault
PGInt4
(
Maybe
Int
)
where
queryRunnerColumnDefault
=
fieldQueryRunnerColumn
...
...
@@ -101,17 +105,16 @@ instance QueryRunnerColumnDefault PGFloat8 (Maybe Double) where
-- TODO: Add option on conflict
insert
NodeNgramsNgramsNew
::
[
NodeNgrams
Ngrams
]
->
Cmd
err
Int64
insert
NodeNgramsNgramsNew
=
insertNodeNgramsNgrams
W
.
map
(
\
(
Node
Ngrams
Ngrams
n
ng1
ng2
maybeWeight
)
->
Node
Ngrams
Ngrams
(
pgNodeId
n
)
insert
_Node_NodeNgrams_NodeNgrams
::
[
Node_NodeNgrams_Node
Ngrams
]
->
Cmd
err
Int64
insert
_Node_NodeNgrams_NodeNgrams
=
insert_Node_NodeNgrams_NodeNgrams_
W
.
map
(
\
(
Node
_NodeNgrams_Node
Ngrams
n
ng1
ng2
maybeWeight
)
->
Node
_NodeNgrams_Node
Ngrams
(
pgNodeId
n
)
(
pgInt4
ng1
)
(
pgInt4
ng2
)
(
pgDouble
<$>
maybeWeight
)
)
insert
NodeNgramsNgramsW
::
[
NodeNgramsNgrams
Write
]
->
Cmd
err
Int64
insert
NodeNgramsNgrams
W
ns
=
do
insert
_Node_NodeNgrams_NodeNgrams_W
::
[
Node_NodeNgrams_NodeNgrams_
Write
]
->
Cmd
err
Int64
insert
_Node_NodeNgrams_NodeNgrams_
W
ns
=
do
c
<-
view
connection
liftIO
$
runInsertMany
c
nodeNgramsNgramsTable
ns
liftIO
$
runInsertMany
c
node_NodeNgrams_NodeNgrams_Table
ns
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