Neo4j 通过批量迭代创建复杂的动态关系

问题描述 投票:0回答:1

我有一个一直在处理的问题。基本上我有两组类类型节点,一组称为 Genes,另一组称为 n4sch__Class,Genes 有一个参数“GO ID”,将它们链接到类类别名称。获得所有匹配的类节点后,我想创建一个也基于基因节点参数“Qualifier”的关系,并且该参数是动态的,因此我需要使用 apoc.create.relationship。查询也相当大,因此需要进行批处理。这是我到目前为止所拥有的,但它返回一个错误:

call apoc.periodic.iterate( "MATCH (n:Genes),(c:n4sch__Class) WHERE n.
GO ID
 = c.n4sch__name RETURN n,c", "WITH n, c,  CALL apoc.create.relationship(n, n.Qualifier, {}, c) YIELD rel RETURN rel",{batchMode: "BATCH_SINGLE", BatchSize:100})

“输入‘apoc’无效:预期...(第 2 行,第 6 列(偏移量:17)) “调用 apoc.create.relationship(n, n.Qualifier, {}, c) YIELD rel RETURN rel” ^”:17

neo4j cypher
1个回答
0
投票

来自文档这里

在名称中使用特殊字符

非字母字符,包括 数字、符号和空白字符可以在名称中使用,但是 必须使用反引号转义。例如:

^n
1first
$$n
、 和
my variable has spaces
。数据库名称是一个例外,可能 包含点而无需转义。

要修复您的查询,只需在“GO ID”周围添加反引号即可:

CALL apoc.periodic.iterate( 
  "MATCH (n:Genes),(c:n4sch__Class)
   WHERE n.`GO ID` = c.n4sch__name 
   RETURN n, c", 
  "WITH n, c,  
   CALL apoc.create.relationship(n, n.Qualifier, {}, c) 
   YIELD rel 
   RETURN rel",
  {batchMode: "BATCH_SINGLE", BatchSize: 100}) 
© www.soinside.com 2019 - 2024. All rights reserved.