作为第一次尝试,您应该查看我刚刚为事务端点添加的功能:
http://nicolewhite.github.io/RNeo4j/docs/transactions.html
library(RNeo4j)
graph = startGraph("http://localhost:7474/db/data/")
clear(graph)
data = data.frame(Origin = c("SFO", "AUS", "MCI"),
FlightNum = c(1, 2, 3),
Destination = c("PDX", "MCI", "LGA"))
query = "
MERGE (origin:Airport {name:{origin_name}})
MERGE (destination:Airport {name:{dest_name}})
CREATE (origin)<-[:ORIGIN]-(:Flight {number:{flight_num}})-[:DESTINATION]->(destination)
"
t = newTransaction(graph)
for (i in 1:nrow(data)) {
origin_name = data[i, ]$Origin
dest_name = data[i, ]$Dest
flight_num = data[i, ]$FlightNum
appendCypher(t,
query,
origin_name = origin_name,
dest_name = dest_name,
flight_num = flight_num)
}
commit(t)
cypher(graph, "MATCH (o:Airport)<-[:ORIGIN]-(f:Flight)-[:DESTINATION]->(d:Airport)
RETURN o.name, f.number, d.name")
在这里,我形成一个 Cypher 查询,然后循环访问数据帧并将值作为参数传递给 Cypher 查询。您现在的尝试会很慢,因为您要为创建的每个节点发送单独的 HTTP 请求。通过使用事务端点,您可以在单个事务下创建多个事物。如果您的数据框非常大,我会将每个事务分成大约 1000 行。
作为第二次尝试,您应该考虑在 neo4j-shell 中使用 LOAD CSV。