在密码查询中创建约束,节点和关系

时间:2017-02-08 04:08:33

标签: graph neo4j cypher

我是图数据库的新手。我的项目是通过Rstudio访问neo4j 3.2.0。

我的数据输入快照:

  

头(cleandata)

  TimeSeconds ipLayerProtocol firstSeenSrcIp firstSeenSrcPort firstSeenDestIp firstSeenDestPort
1  1365582756              17     172.20.2.3            29961 239.255.255.250              1900
2  1365582756              17    172.20.2.18            29986 239.255.255.250              1900
3  1365582756              17    172.20.2.17            29985 239.255.255.250              1900

我想要的输出:

Desired graph output

  

我想做什么:   喜欢一次性提交包含多个cypher语句的查询,批量为5000。

以下是代码:

query = "
  CREATE CONSTRAINT ON (ipcluster:IPCluster) ASSERT ipcluster.ip IS UNIQUE 
  CREATE CONSTRAINT ON (origin:IPNode) ASSERT origin.ipport IS UNIQUE 
  CREATE CONSTRAINT ON (dest:IPNode) ASSERT dest.ipport IS UNIQUE

  MERGE (ipcluster:IPCluster {ip: {SrcIP} })
  CREATE (flow:Flow {timestamp: {TimeSeconds},protocol:{TransportProto} })
  SET flow.timestamp = TOINT({TimeSeconds})

  MERGE (origin:IPNode {ip: {SrcIP}, port: {SrcPort}, ipport:{SrcIP+':'+SrcPort} })
  MERGE (dest:IPNode {ip: {DstIP}, port: {DstPort},ipport:{DstIP+':'+DstPort} })
  MERGE (ipcluster)-[has:HAS]->(origin)

  CREATE (flow)-[o:ORIGIN]->(origin)
  CREATE (flow)-[d:DESTINATION]->(dest)
"

t1 <- Sys.time()

tx = newTransaction(graph)

for(i in 1:nrow(cleandata)) {
  row = cleandata[i, ]

  appendCypher(tx, query,
               SrcIP=row$firstSeenSrcIp,
               SrcPort=row$firstSeenSrcPort,
               TimeSeconds=row$TimeSeconds,
               TransportProto=row$ipLayerProtocol,
               DstIP=row$firstSeenDestIp,
               DstPort=row$firstSeenDestPort)
  }
commit(tx)
t2 <- Sys.time()
t2 - t1
summary(graph)
  

遇到错误:

Error in appendCypher.transaction(tx, query, SrcIP = row$firstSeenSrcIp,  : 
  Neo.ClientError.Statement.SyntaxError
Invalid input 'C': expected whitespace, comment, ';' or end of input (line 2, column 74 (offset: 76))

1 个答案:

答案 0 :(得分:0)

我轻松的赌注是意外的C来自第二次创造,因为没有;在第一个创建约束的末尾。