Graph 在cypher查询中创建约束、节点和关系

Graph 在cypher查询中创建约束、节点和关系,graph,neo4j,cypher,Graph,Neo4j,Cypher,我不熟悉图形数据库。我的项目是通过Rstudio访问neo4j 3.2.0 我的数据输入快照: 头部(清洁数据) 我的期望输出: 我想做的是: 喜欢一次提交包含多个cypher语句的查询,一批5000个 代码如下: query = " CREATE CONSTRAINT ON (ipcluster:IPCluster) ASSERT ipcluster.ip IS UNIQUE CREATE CONSTRAINT ON (origin:IPNode) ASSERT origin.ip

我不熟悉图形数据库。我的项目是通过Rstudio访问neo4j 3.2.0

我的数据输入快照:

头部(清洁数据)

我的期望输出:

我想做的是: 喜欢一次提交包含多个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)

我很容易打赌,意外的C来自第二次创建,因为没有;在第一次创建约束的末尾。

是的,我以前尝试过,下一个错误消息是“不能在一个查询中有多个语句”。首先,您似乎创建了n次约束。AppendcPher方法在做什么?AppendcPher正在尝试检索必要的数据,例如每个数据行的时间秒,并动态创建ipnodes/constraints/relationship。这就是我要做的。如果我的理解有误,请纠正我。谢谢。好的,你的方法是替换字符串。在控制台中显示最终查询。在neo4j浏览器中复制粘贴一个。希望错误消息更有用,因为它对重新创建每个节点的约束毫无用处。它们是基于标签创建的。当希望破灭时,创建一个CSV文件,然后使用load CSV和使用周期提交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))