Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j:查找连接程度_Neo4j_Cypher_Graph Theory_Graph Databases - Fatal编程技术网

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中循环用户的最佳方式是什么

我使用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中运行实际的循环是一个好主意吗?它将为每对用户发送一个单独的查询?