【发布时间】:2017-06-25 06:56:56
【问题描述】:
我正在使用 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)?
如果您对如何创建上述数据集有任何提示,请告诉我。
非常感谢!
【问题讨论】:
-
您不必创建相反的关系,只需不要在查询中指定方向 ()-[]-()
-
谢谢,但看起来 Neo4j 中的所有关系都必须有一个方向(根据this 帖子)。
-
确实,所有的关系都是有方向的。但是,当您查询结果时,您不必指定方向。根据您提供的链接中的示例: MATCH (A)-[FRIEND]-(B) RETURN A, Bspan>
-
@JeromeB,感谢您的建议,但我认为定义双向的 [FRIEND] 仍然很重要。想象一个场景,节点 A 流入节点 B 并且它也流入节点 C。在这种情况下,我希望节点 C 和 B 共享 2 度连接,但除非您定义 A -> B AND A C 和 A
标签: neo4j cypher graph-theory graph-databases