Neo4j:找到连接程度

时间:2017-06-25 06:56:57

标签: neo4j cypher graph-theory graph-databases

我正在使用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
...    ...

有没有更好的方法来做到这一点,而不是简单地为每对用户运行shortestPath()函数?如果没有,那么在Neo4j中循环用户的最佳方法是什么?

另外,我想方向在这里起作用,所以你建议将这种关系设为双向,这样对于每个(user1)-[:INTERACTS_WITH]->(user2)我也会创建反向关系(user2)-[:INTERACTS_WITH]->(user1)吗?

如果您有关于如何创建上述数据集的任何提示,请告诉我们。

非常感谢!

1 个答案:

答案 0 :(得分:1)

  

有没有更好的方法来执行此操作而不是简单地运行shortestPath()   每对用户的功能?如果没有,那么最好的方法是什么   在Neo4j中循环用户?

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

  

另外,我想方向在这里起作用,你也一样   建议使这种关系双向,以便每一个   (user1)-[:INTERACTS_WITH]->(user2)我也会反过来   关系(user2)-[:INTERACTS_WITH]->(user1)

不,你不需要另一种关系。请记住,在Neo4j中查询时可以忽略关系方向。在建模自然双向的关系时,我们应该只使用一个关系来表示它。因此,在查询图表时,我们可以横向从abba。当双向关系中的某些数据在abba之间有所不同时,您只需要一个额外的关系。假设模型中的用户之间的互动具有权重,并且此权重可能不同于abba。在这种情况下,您可以将此权重存储为关系中的属性。例如:

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

查看this link关于建模双向关系的信息。