1. 背景
- 单机Neo4j。版本3.5.X
- 查询某个节点全部的关系以及对应的关系
2.遇到的问题
- 一开始查询节点的所有关系的时候,接口响应速度很慢。debug代码发现节点只有44个,但是对应的所有的关系又3000+条。关系的返回和处理耗时较长
- 在neo4j查询某节点的所有关系中,其中不同的关系中某路径会反复出现,导致返回的关系有很多重复的路径。所以返回的关系集合会比较多。
查询关系的语句
MATCH (n:`label`)-[r*0..]-() where ID(n) = {id} return distinct r
3. 问题解决方法
- 其实只需要返回去重后的起始节点和终止节点的关系即可。不需要返回各种路径中全部重复的数据。
- 起始节点startNode,终止节点endNode,关系rel,根据startNode去重复。返回rel
返回去重后的关系语句
MATCH (n:`label`)-[r*0..]-()
WHERE ID(n) = {id}
UNWIND r AS rel
WITH DISTINCT startNode(rel) AS startNode, endNode(rel) AS endNode, rel
RETURN rel