删除密码查询输出的自同构



当执行Cypher查询以检索具有自同构的特定子图时,我们说

MATCH (a)-[:X]-(b)-[:X]-(c),
RETURN a, b, c

似乎默认行为是返回每个检索到的子图及其所有自同构。在该示例中,如果(u)-[:X]-(v)-[:X]-(w)是匹配该模式的图,则输出将是u,v,w以及w,v,u,它们包含在同一个图中。

是否有一种方法来检索每个子图只一次?

编辑:如果Cypher在搜索中有一个功能,使用某种对称破缺条件,因为它会减少计算时间,那就太好了。如果不是这种情况,您将如何后处理以找到所需的输出?

在您正在进行的查询中,(a)-[r:X]-(b)(a)-[t:X]-(c)引用类似的模式。因为(b)和(c)可以互换。为什么需要重复匹配两次?MATCH (a)-[r:X]-(b) RETURN a, r, b返回您正在查找的所有子图。

编辑

您可以执行以下操作来查找具有两种类型X关系的节点。

MATCH (a)-[r:X]-(b) WHERE size((a)-[:X]-()) = 2 RETURN a, r, b

对于这种类型的镜像模式,我们可以在内部图id上添加限制,以便只保留两条路径中的一条:

MATCH (a)-[:X]-(b)-[:X]-(c)
WHERE id(a) < id(c)
RETURN a, b, c

这也将防止a = c.