我有一个Neo4j图,它由总共100.000个用户和2.000.000个关系(用户之间的友谊)组成。一个用户大约有20种友谊。
现在,我试图了解找到特定用户的朋友(深度1)、朋友的朋友(深度2)和朋友的朋友(深度3)所需的时间。
这是我运行的密码查询(对于id为86660的用户):
深度1
MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User)
RETURN u2.name深度2
MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User)-[:FRIEND_OF]->(u3:User)
RETURN u3.name深度3
MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User)-[:FRIEND_OF]->(u3:User)-[:FRIEND_OF]->(u4:User)
RETURN u4.name深度1(返回17个结果)和深度2(返回320个结果)查询只需几毫秒,而深度3则是无穷无尽的。
如何在合理的时间内得到depth3的结果?
更新
通过侧写,我得到了这个:
PROFILE
MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User)-[:FRIEND_OF]->(u3:User)-[:FRIEND_OF]->(u4:User)
RETURN u4.name

发布于 2017-03-02 08:16:19
显然这很有帮助
MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF*3..3]->(u2:User) RETURN u2.name我认为我的查询和您的查询之间的区别是,您映射了整个过程中的所有实体,而[:FRIEND_OF*3..3]将我的查询限制为只检查距离为3跳的实体。你可以找到更多的信息,在文件中
https://stackoverflow.com/questions/42536070
复制相似问题