Neo4j 查询耗时太长

标签 neo4j

我有一个 Neo4j 图,它由总共 100.000 个用户和 2.000.000 个关系(用户之间的友谊)组成。 一个用户有大约 20 个好友。

现在我想看看找到特定用户的 friend (深度 1)、 friend 的 friend (深度 2)和 friend 的 friend 的 friend (深度 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,我得到了这个:

PROFILE 
    MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User)-[:FRIEND_OF]->(u3:User)-[:FRIEND_OF]->(u4:User)
    RETURN u4.name

enter image description here

最佳答案

显然这有帮助

MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF*3..3]->(u2:User) RETURN u2.name

我认为我的查询与您的查询之间的区别在于您沿途映射所有实体,而 [:FRIEND_OF*3..3] 将我的查询限制为仅检查 3 个实体跳开。您可以找到更多信息 in documentation

关于Neo4j 查询耗时太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42536070/

相关文章:

java - Neo4j 2.0中如何优雅地处理NotFoundException?

java - neo4j 中的随机后序遍历

neo4j - Neo4j 中性能缓慢的批量更新关系属性

Neo4J Cypher - 限制一个节点只有一个关系

pagination - Cypher SORT 性能

neo4j - Cypher 删除一个节点和所有相关节点(如果它们没有进一步的关系)

Neo4j:无法加载带有 ID 的节点

spring - Spring Data Neo4j 4.0 Gradle依赖关系

node.js - 如何在代码中解析带引号的搜索查询

docker - 如何从 docker 中的 neo4j 获取转储?