[英]Neo4j more efficient Cypher query for finding connected nodes with a relationship
我有一个补丁,其中我知道一个起始节点和结束节点,其中2个节点之间的节点数量未知。我希望收集节点的集合以及链中每个退出节点的关系。
PROFILE MATCH p = (:Question{id:'1234'})-[:Answer*0..3]->(t)-
[:Answer]->(:Question{id:'5678'})
WHERE t:Set OR t:Read
OPTIONAL MATCH (x)-[v:Answer]->(y)
WHERE x.id <> '1234' and x IN nodes(p) AND v IN rels(p)
return x,v
该查询的效率非常低,因为OPTIONAL MATCH (x)-[v:Answer]->(y)
需要完整的节点扫描。
我知道t
,结果x
的类型将是Set
或Read
,这会大大减少扫描量,但不认为有查询此方法的方法。
有什么办法可以优化这个?
您可以简单地展开已经拥有的路径:
MATCH p = (:Question{id:'1234'})-[:Answer*0..3]->(t)-[:Answer]->(:Question{id:'5678'})
WHERE t:Set OR t:Read
WITH nodes(p) AS nds,
rels(p) AS rls
UNWIND range(1, length(nds)-2) AS i
RETURN nds[i] AS x,
rls[i] AS v
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.