Neo4j Cypher 查询查找常见 children 速度慢。什么是最好的方法?
Neo4j Cypher query slow to find common children. What is the best approach?
我是 Neo4j - 2.1.6 的新手。在我的图表中,任何给定节点都可以有多个 parents 和多个 children,它们也是其他节点的 parents 和 children。我需要做的是找到几个搜索节点共有的 parents 和 children。搜索到的节点可以与它们共同的parent或child相距一到数百个关系。所有节点都有相同的标签。
我正在使用以下密码查询,但是当您添加多个节点时它会非常慢....我想一次搜索 20 个或更多节点以查找它们的公共连接。在这里,我在 4 个节点上搜索 children:
MATCH (n1)-[*]->(x), (n2)-[*]->(x), (n3)-[*]->(x), (n4)-[*]->(x)
WHERE n1.name = "node1" AND n2.name ="node2" AND n3.name ="node3" AND n4.name ="node4"
RETURN DISTINCT x.name
还有其他方法可以解决这个问题吗?
谢谢!
添加标签,并确保您在 :Label(name)
上有一个索引
例如如果你的标签是 :Node
create index on :Node(name);
MATCH (n1:Node)-[*]->(x),(n2:Node)-[*]->(x),(n3:Node)-[*]->(x),(n4:Node)-[*]->(x)
USING INDEX n1:Node(name)
USING INDEX n2:Node(name)
USING INDEX n3:Node(name)
USING INDEX n4:Node(name)
WHERE n1.name = "node1" AND n2.name ="node2" AND n3.name ="node3" AND n4.name ="node4"
RETURN DISTINCT x.name
对于很长的路径,Cypher 可能会遇到一些问题。
如果这是必须在几毫秒内完成的图形中的频繁操作,我建议为 Neo4j 服务器创建一个服务器扩展,用 Java 编写。
我是 Neo4j - 2.1.6 的新手。在我的图表中,任何给定节点都可以有多个 parents 和多个 children,它们也是其他节点的 parents 和 children。我需要做的是找到几个搜索节点共有的 parents 和 children。搜索到的节点可以与它们共同的parent或child相距一到数百个关系。所有节点都有相同的标签。
我正在使用以下密码查询,但是当您添加多个节点时它会非常慢....我想一次搜索 20 个或更多节点以查找它们的公共连接。在这里,我在 4 个节点上搜索 children:
MATCH (n1)-[*]->(x), (n2)-[*]->(x), (n3)-[*]->(x), (n4)-[*]->(x)
WHERE n1.name = "node1" AND n2.name ="node2" AND n3.name ="node3" AND n4.name ="node4"
RETURN DISTINCT x.name
还有其他方法可以解决这个问题吗? 谢谢!
添加标签,并确保您在 :Label(name)
上有一个索引例如如果你的标签是 :Node
create index on :Node(name);
MATCH (n1:Node)-[*]->(x),(n2:Node)-[*]->(x),(n3:Node)-[*]->(x),(n4:Node)-[*]->(x)
USING INDEX n1:Node(name)
USING INDEX n2:Node(name)
USING INDEX n3:Node(name)
USING INDEX n4:Node(name)
WHERE n1.name = "node1" AND n2.name ="node2" AND n3.name ="node3" AND n4.name ="node4"
RETURN DISTINCT x.name
对于很长的路径,Cypher 可能会遇到一些问题。
如果这是必须在几毫秒内完成的图形中的频繁操作,我建议为 Neo4j 服务器创建一个服务器扩展,用 Java 编写。