我有一个用于社交网络分析的简单 neo4j 数据库。数据库由用户节点和用户可能共有的其他节点组成,例如电话或地址。只有一种类型的关系 [:HAS]。对于一个用户来匹配另一个用户,他们必须至少遍历一个节点。
我们的目标是将这些数据存储在图表中,并部署一个 R Shiny 应用程序以输入用户 ID 并查看连接用户的完整网络。为了做到这一点,我们需要将所有节点和关系从连接的子图中拉到边数据框中。
我们使用以下密码查询取得了一些成功。但是,此查询只会拉入距离不超过 5 度的节点。对于任何高度连接的节点,它也会失败 - 在此过程中冻结我们的 neo4j 实例。我们应该使用更有效的方法将图形数据转换为边数据框吗?
edges_query=paste('MATCH (c0:user {userID:',as.character(cust_id),'})-[]->(l1)
OPTIONAL MATCH (l1)<-[]-(c1)
where id(c1) <> id(c0)
OPTIONAL MATCH (c1)-[]->(l2)
where id(l2) <> id(l1)
OPTIONAL MATCH (l2)<-[]-(c2)
where id(c2) <> id(c0)
OPTIONAL MATCH (c2)-[]->(l3)
where id(l3) <> id(l2)
OPTIONAL MATCH (l3)<-[]-(c3)
where id(c3) <> id(c2)
OPTIONAL MATCH (c3)-[]->(l4)
where id(l4) <> id(l3)
OPTIONAL MATCH (l4)<-[]-(c4)
where id(c4) <> id(c3)
OPTIONAL MATCH (c4)-[]->(l5)
where id(l5) <> id(l4)
OPTIONAL MATCH (l5)<-[]-(c5)
where id(c5) <> id(c4)
return
ID(c0) as c0_node_id
, c0.userID as c0_user_id
, ID(l1) as l1_node_id
, LABELS(l1) as l1_node_type
, ID(c1) as c1_node_id
, c1.userID as c1_user_id
, id(l2) as l2_node_id
, labels(l2) as l2_node_type
, ID(c2) as c2_node_id
, c2.userID as c2_user_id
, id(l3) as l3_node_id
, labels(l3) as l3_node_type
, ID(c3) as c3_node_id
, c3.userID as c3_user_id
, id(l4) as l4_node_id
, labels(l4) as l4_node_type
, ID(c4) as c4_node_id
, c4.userID as c4_user_id
, id(l5) as l5_node_id
, labels(l5) as l5_node_type
, ID(c5) as c5_node_id
, c5.userID as c5_user_id
',sep='')