Neo4j:查找连接程度
我使用Neo4j来查找用户之间的连接程度。我有以下形状的数据:Neo4j:查找连接程度,neo4j,cypher,graph-theory,graph-databases,Neo4j,Cypher,Graph Theory,Graph Databases,我使用Neo4j来查找用户之间的连接程度。我有以下形状的数据: (用户)-[:与]->(用户)交互 因此,如果用户_1与用户_2交互,用户_2与用户_3交互,那么用户_1和用户_3共享二级连接 理想情况下,我希望得到如下数据集作为回报: degree count NULL 123 1 1050 2 3032 3 2110 ... ... 有没有比为每对用户运行shortestPath()函数更好的方法?如果不是,那么在Neo4j中循环用户的最佳方式是什么
(用户)-[:与]->(用户)交互
因此,如果用户_1与用户_2交互,用户_2与用户_3交互,那么用户_1和用户_3共享二级连接
理想情况下,我希望得到如下数据集作为回报:
degree count
NULL 123
1 1050
2 3032
3 2110
... ...
有没有比为每对用户运行shortestPath()函数更好的方法?如果不是,那么在Neo4j中循环用户的最佳方式是什么
此外,我认为方向在这里起着作用,因此您是否建议将此关系设置为双向关系,以便对于每个(user1)-[:interaction_WITH]->(user2)
,我还将创建反向关系(user2)-[:interaction_WITH]->(user1)
如果您对如何创建上述数据集有任何提示,请告诉我
非常感谢
有没有比简单地运行shortestPath()更好的方法
每对用户的功能?如果没有,那么最好的方法是什么
Neo4j中的循环用户
我相信为每一对用户运行shortestPath()
是一个不错的选择,但请记住它应该非常昂贵
此外,我认为方向在这里起着作用,你也会这样做
建议将此关系设置为双向关系,以便
(user1)-[:与交互]->(user2)
我也会创建相反的
关系(user2)-[:与]->(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)
查看有关双向关系建模的信息。您不必创建相反的关系,只需在查询中指定方向()-[]-()谢谢,但Neo4j中的所有关系似乎都必须有一个方向(根据post)。事实上,所有关系都是用一个方向创建的。但在查询结果时,不会强制指定方向。根据您提供的链接中的示例:匹配(A)-[FRIEND]-(B)返回A,B@JeromeB,谢谢你的建议,但我认为确定[朋友]是双向的还是很重要的。想象一个场景,节点a流入节点B,它也流入节点C。在这种情况下,我希望节点C和B共享一个二级连接,但除非您定义a->B和a C,并感谢您的回答。你所说的“仅从a到b的最短路径,而不是a到b和b到a的最短路径”是什么意思?应该是“A对B,而不是B对A”吗?如果是这样,在单向图中,A到B和B到A的结果会不同吗?如果是这样,那么我需要两个号码hello@de1pher。是的,你说得对。我把它从我的答案中删除了。谢谢,太好了,谢谢!关于如何构造此查询,有什么建议吗?您认为在R/Python中运行实际的循环是一个好主意吗?它将为每对用户发送一个单独的查询?