使用密码查询在 neo4j 中提取子图



我正在使用 neo4j 3.1 和 java 8,我想提取一个连接的子图来存储它作为测试数据库。是否有可能做到以及如何做到?如何使用返回输出的子句 Return 来做到这一点。因此,我必须创建新的节点和关系,或者只是导出子图并将其放入新数据库中。

由于我有一个断开连接的图,我如何提取连接的子图。

谢谢

这有两个部分...获取连接的子图,然后找到导出的方法。

APOC程序似乎可以涵盖这两个方面。这个答案中使用路径扩展器的方法应该可以让你得到连接子图中的所有节点(如果关系类型无关紧要,请省略 relationsFilter 参数)。

下一步是获取所有这些节点之间的所有关系。APOC在图算法部分的apoc.algo.cover()函数应该可以做到这一点。

像这样的东西(假设这是在子图查询之后,并且subgraphNode在不同子图节点列的范围内):

...
WITH COLLECT(subgraphNode) as subgraph, COLLECT(id(subgraphNode)) as ids
CALL apoc.algo.cover(ids) YIELD rel
WITH subgraph, COLLECT(rel) as rels
...

现在,您在子图中拥有了节点和关系的集合,您可以导出它们。

APOC Procedure提供了几种导出方式,从CSV到CypherScript。您应该能够找到适合您的选项。

您还可以使用 neo4j-shell 将查询结果提取到文件中,并使用相同的文件将其重新导入 neo4j 数据库:

ikwattro@graphaware-team ~/d/_/310> ./bin/neo4j-shell -c 'dump MATCH (n:Product)-[r*2]->(x) RETURN n, r, x;' > result.cypher

检查文件

ikwattro@graphaware-team ~/d/_/310> cat result.cypher
begin
commit
begin
create (_1:`Product` {`id`:"product123"})
create (_2:`ProductInformation` {`id`:"product123EXCEL"})
create (_3:`ProductInformationElement` {`id`:"product123EXCELtitle", `key`:"title", `value`:"Original Title"})
create (_5:`ProductInformationElement` {`id`:"product123EXCELproduct_type", `key`:"product_type", `value`:"casual_bag"})
create (_1)-[:`PRODUCT_INFORMATION`]->(_2)
create (_2)-[:`INFORMATION_ELEMENT`]->(_3)
create (_2)-[:`INFORMATION_ELEMENT`]->(_5)
;
commit

使用此文件馈送另一个 neo4j :

ikwattro@graphaware-team ~/d/_/310> ./bin/neo4j-shell -file result.cypher
Transaction started
Transaction committed
Transaction started
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 4
Relationships created: 3
Properties set: 8
Labels added: 4
52 ms
Transaction committed

最新更新