Neo4j读取所有子图,没有重复Cypher查询



我一直在尝试获得一个基于节点查询的子图。只要子图中的所有节点都连接,查询就应该忽略关系方向:例如:u1-朋友->u2-朋友->u3u4-朋友->u5-朋友->u6

搜索u1或u2或u3时,应返回一组:[u1,u2,u3]

我使用了以下Cypher查询:

MATCH (a:User)-[:FRIEND_OF*0..]-(b)
WHERE a.userId = 'some_id'
WITH a, collect(DISTINCT b) AS sets
RETURN DISTINCT sets

问题是,我得到了所有集合的排列,比如:

DATA: u1 -FRIEND-> u2 -FRIEND-> u3
RETURN: [u1,u2,u3],[u1,u3,u2],[u2,u1,u3]...

如何区分不同的集合以只返回一个排列?

我还想支持一个用户可以在不同的子图中的情况,所以响应应该是几个子图。

感谢

此查询应该有效:

MATCH p=(a:User)-[:FRIEND_OF*0..]-(b)
WHERE a.userId = 'some_id'
WITH DISTINCT a, b
ORDER BY ID(b)
WITH a, COLLECT(b) AS sets
RETURN DISTINCT sets;

它获取不同的a/b对,按本机ID对b节点进行排序,将排序后的节点放入集合中,最后返回不同的集合。

为了获得更好的性能,您可能需要为:User(userId)创建一个索引。

最新更新