首页 > 解决方案 > 如何使用 Cypher 将两个不同的 Graph 存储为一个?

问题描述

对于项目CAPS的后续特征,我需要将 2 个不同的 Graph 存储到一个中:

Graph3=Graph1+Graph2

我试图寻找解决方案来做到这一点,我发现UNION ALL但最后一个没有像我预期的那样工作。有没有另一种方法可以用 Cypher 做到这一点?

例子 :

val Graph1=session.cypher("""
                            | FROM GRAPH mergeGraph
                            | MATCH (from)-[via]->(to)
                            |WHERE substring(from.geohash,0,5)=substring(to.geohash,0,5)
                            | CONSTRUCT
                            |  CREATE (h1:HashNode{geohash:substring(from.geohash,0,5)})-[COPY OF via]->(h1)
                            | RETURN GRAPH
                             """.stripMargin).graph

其中包含此模式:

在此处输入图像描述

val Graph2=session.cypher("""
                            | FROM GRAPH mergeGraph
                            | MATCH (from)-[via]->(to)
                            |WHERE substring(from.geohash,0,5)<>substring(to.geohash,0,5)
                            | CONSTRUCT
                            |  CREATE (:HashNode{geohash:substring(from.geohash,0,5)})-[COPY OF via]->(:HashNode{geohash:substring(to.geohash,0,5)})
                            | RETURN GRAPH
                             """.stripMargin).graph

其中包含此模式:

在此处输入图像描述

与联合所有:

Graph3=Graph1.unionAll(Graph2) 

我得到这张图:

在此处输入图像描述

如您所见,绿色节点是 Graph2 没有关系的节点!那是我没想到的。

标签: cyphercypher-3.1

解决方案


推荐阅读