Neo4j的:找到连接的程度(Neo4j: find degree of connection)

2019-09-29 04:08发布

我使用的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)

如果您有关于如何创建上述数据集的任何建议,请让我知道。

非常感谢!

Answer 1:

有没有更好的办法做到这一点,而不是简单地运行最短路径()函数每对用户? 如果不是,那么什么是循环遍历的Neo4j用户的最佳方法是什么?

我相信,运行shortestPath()为每对用户是个不错的选择,但要记住,它应该是非常昂贵的。

另外,我想象的方向在这里扮演一个角色,所以你会建议做这种关系是双向的,因此,对于每一个(user1)-[:INTERACTS_WITH]->(user2)我也创建反向关系(user2)-[:INTERACTS_WITH]->(user1)

不,你并不需要另一种关系。 请记住,关系方向可以在Neo4j的查询时被忽略。 当模拟的是自然是双向关系,我们应该只使用一个关系来代表它。 所以查询图时,我们可以从横向abba 。 你只需要一个额外的关系时,在双向关系的一些数据可以之间的不同abba 。 假设模型中的用户之间的互动有重量,这个重量可以从不同的a ,以bba 。 在这种情况下,你可以这个重量存储在关系的性质。 例:

(a)-[:INTERACTS_WITH {weight:10}]->(b)
(b)-[:INTERACTS_WITH {weight:6}]->(a)

采取一看这个链接关于造型双向关系。



文章来源: Neo4j: find degree of connection