Graph 在cypher查询中创建约束、节点和关系
我不熟悉图形数据库。我的项目是通过Rstudio访问neo4j 3.2.0 我的数据输入快照: 头部(清洁数据) 我的期望输出: 我想做的是: 喜欢一次提交包含多个cypher语句的查询,一批5000个 代码如下: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
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))