我使用的Neo4j找到用户之间的连接程度。 我在跟随形状数据:
(user)-[:INTERACTS_WITH]->(user)
所以,如果用USER_1和user_2互动user_2交互与user_3,然后USER_1和user_3共享二级连接。
理想情况下,我想获得以下数据集这样的回报:
degree count
NULL 123
1 1050
2 3032
3 2110
... ...
有没有更好的办法做到这一点,而不是简单地运行最短路径()函数每对用户? 如果不是,那么什么是循环遍历的Neo4j用户的最佳方法是什么?
另外,我想象的方向在这里扮演一个角色,所以你会建议做这种关系是双向的,因此,对于每一个(user1)-[:INTERACTS_WITH]->(user2)
我也创建反向关系(user2)-[:INTERACTS_WITH]->(user1)
如果您有关于如何创建上述数据集的任何建议,请让我知道。
非常感谢!
有没有更好的办法做到这一点,而不是简单地运行最短路径()函数每对用户? 如果不是,那么什么是循环遍历的Neo4j用户的最佳方法是什么?
我相信,运行shortestPath()
为每对用户是个不错的选择,但要记住,它应该是非常昂贵的。
另外,我想象的方向在这里扮演一个角色,所以你会建议做这种关系是双向的,因此,对于每一个(user1)-[:INTERACTS_WITH]->(user2)
我也创建反向关系(user2)-[:INTERACTS_WITH]->(user1)
不,你并不需要另一种关系。 请记住,关系方向可以在Neo4j的查询时被忽略。 当模拟的是自然是双向关系,我们应该只使用一个关系来代表它。 所以查询图时,我们可以从横向a
到b
和b
到a
。 你只需要一个额外的关系时,在双向关系的一些数据可以之间的不同a
到b
和b
到a
。 假设模型中的用户之间的互动有重量,这个重量可以从不同的a
,以b
和b
到a
。 在这种情况下,你可以这个重量存储在关系的性质。 例:
(a)-[:INTERACTS_WITH {weight:10}]->(b)
(b)-[:INTERACTS_WITH {weight:6}]->(a)
采取一看这个链接关于造型双向关系。