Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j读取所有子图而不重复Cypher查询_Neo4j_Cypher - Fatal编程技术网

Neo4j读取所有子图而不重复Cypher查询

Neo4j读取所有子图而不重复Cypher查询,neo4j,cypher,Neo4j,Cypher,我一直在尝试基于节点查询获取子图。 只要子图中的所有节点都已连接,查询就应忽略关系方向: 前任: u1-朋友->u2-朋友->u3 u4-朋友->u5-朋友->u6 搜索u1、u2或u3时,应返回一组:[u1、u2、u3] 我使用了以下密码查询: MATCH (a:User)-[:FRIEND_OF*0..]-(b) WHERE a.userId = 'some_id' WITH a, collect(DISTINCT b) AS sets RETURN DISTINCT sets 问题是我得

我一直在尝试基于节点查询获取子图。 只要子图中的所有节点都已连接,查询就应忽略关系方向: 前任: u1-朋友->u2-朋友->u3 u4-朋友->u5-朋友->u6

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

我使用了以下密码查询:

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)
创建一个索引,以获得更好的性能。

这是正确的方法,但是如果您的子图很大,并且您看到的是性能影响,当扩展以匹配子图中的节点时,您可能会发现比可变长度模式匹配更有效。Thank@cybersam-工作起来很有魅力。另外,谢谢你的索引提示。不客气。请记住最好回答你问题的答案。