私はソーシャルネットワーク分析に使用する簡単なneo4jデータベースを持っています。データベースは、ユーザーノードと、電話やアドレスなど、ユーザーが共通に持つ可能性のある他のノードで構成されています。リレーションシップのタイプは[:HAS]のみです。ユーザーが別のユーザーと一致させるには、その間に少なくとも1つのノードを通過する必要があります。R視覚化で表示する特定の開始点を持つサブグラフ内のすべての接続ノードを選択
私たちの目的は、このデータをグラフに保存し、ユーザーIDを入力して接続されたユーザーの完全なネットワークを確認するためにR shinyアプリケーションを展開することです。これを行うには、接続されたサブグラフからすべてのノードおよび関係をエッジデータフレームにプルする必要があります。
次のサイファークエリを使用していくつかの成功を収めました。ただし、この問合せではノードを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='')