Neo4J cypher查询以查找相似图

Neo4J cypher查询以查找相似图,neo4j,cypher,Neo4j,Cypher,我在一个数据库中有几个单独的图,我目前正在寻找一种方法来获得所有类似图的列表 例如,我有以下三个图表: 如您所见,图1和图2是相似的,而图3是不同的,因为图3的最后一个节点具有标签_4,而不是标签_3(与1和2的情况相同)。 因此,我希望通过查询得到如下结果: [a1->b1->c1,a2->b2->c2],[a3->b3->d3] 而a1->b1->c1是图1,a2->b2->c2是图2,a3->b3->d3是图3 有没有办法用Cypher实现这一点?结

我在一个数据库中有几个单独的图,我目前正在寻找一种方法来获得所有类似图的列表

例如,我有以下三个图表:

如您所见,图1和图2是相似的,而图3是不同的,因为图3的最后一个节点具有标签_4,而不是标签_3(与1和2的情况相同)。 因此,我希望通过查询得到如下结果:

[a1->b1->c1,a2->b2->c2],[a3->b3->d3]
a1->b1->c1
是图1,
a2->b2->c2
是图2,
a3->b3->d3
是图3

有没有办法用Cypher实现这一点?结果的表示也可以不同,只要它对相似的图进行分组(例如,也可以是列表节点ID或仅开始节点ID)

在创建示例时,我使用了以下命令:

CREATE (a1:Label_1 {name: "Label_1"})
CREATE (b1:Label_2 {name: "Label_2"})
CREATE (c1:Label_3 {name: "Label_3"})
CREATE (a2:Label_1 {name: "Label_1"})
CREATE (b2:Label_2 {name: "Label_2"})
CREATE (c2:Label_3 {name: "Label_3"})
CREATE (a3:Label_1 {name: "Label_1"})
CREATE (b3:Label_2 {name: "Label_2"})
CREATE (d3:Label_4 {name: "Label_4"})
CREATE (a1)-[:FOLLOWS]->(b1)
CREATE (b1)-[:FOLLOWS]->(c1)
CREATE (a2)-[:FOLLOWS]->(b2)
CREATE (b2)-[:FOLLOWS]->(c2)
CREATE (a3)-[:FOLLOWS]->(b3)
CREATE (b3)-[:FOLLOWS]->(d3)
如果您:(A)尝试对完整的有向图(即,从根节点开始到叶节点结束的有向图)进行分组,并且(B)只对每个节点使用其中一个(可能是多个)标签感兴趣,这应该是可行的(但是,由于无边界,这可能需要很长时间或在大型数据库中耗尽内存):

您可以通过删除
WHERE
子句来删除(A)约束,但这样会得到更大的结果集(并增加完成时间和内存不足的风险)

MATCH p = (n)-[*]->(m)
WHERE NOT ()-->(n) AND NOT (m)-->()
RETURN [x IN NODES(p) | LABELS(x)[0]] as labelPath, COLLECT(p)