Cypher apoc.export.json.query的速度非常慢



我正在尝试将子图(某些路径上的所有节点和关系(从neo4j导出到json。

我正在使用运行Cypher导出查询

WITH "{cypher_query}" AS query CALL apoc.export.json.query(query, "filename.jsonl", {}) YIELD file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data 
RETURN file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data;

其中cypher_query是

MATCH p = (ancestor: Term {term_id: 'root_id'})<-[:IS_A*..]-(children: Term) WITH nodes(p) as term, relationships(p) AS r, children AS x RETURN term, r, x"

理想情况下,我会让json是subject、relationship、object的三元组(node1,节点之间的关系,node2(——我的理解是,在这种情况下,由于我使用的聚合,我每行得到两个以上的节点。

导出大约80k个节点需要两个多小时,如果能加快查询速度,那就太好了。

  1. 包裹在apoc.periodic.iterate中会有好处吗?我认为apoc.export.json.query已经在这方面进行了优化,但也许我错了
  2. 用一些apoc函数替换标准密码语法中的路径匹配查询会有好处吗
  3. 有没有一种更有效的方法可以将neo4j数据库中的子图导出到json?我认为创建一个图形对象并导出它可能会起作用,但不知道瓶颈在哪里,因此不知道如何进行

你可以试试这个(尽管我不明白为什么你会在结果中需要rel,除非它们有属性(

// limit the number of paths
MATCH p = (root: Term {term_id: 'root_id'})<-[:IS_A*..]-(leaf: Term) 
WHERE NOT EXISTS ((leaf)<-[:IS_A]-())
// extract all relationships
UNWIND relationships(p) AS rel
// Return what you need (probably a subset of what I indicated below, eg. some properties)
RETURN startNode(rel) AS child, 
rel,
endNode(rel) AS parent

最新更新