Neo4j中的多个匹配语句

Neo4j中的多个匹配语句,neo4j,Neo4j,我有一个MATCH语句列表,这些语句彼此完全无关。但是如果我像这样执行它们 MATCH (a:Person),(b:InProceedings) WHERE a.identifier = 'person/joseph-valeri' and b.identifier = 'conference/edm2008/paper/209' CREATE (a)-[r:creator]->(b) MATCH (a:Person),(b:InProceedings) WHERE a.identifie

我有一个
MATCH
语句列表,这些语句彼此完全无关。但是如果我像这样执行它们

MATCH (a:Person),(b:InProceedings) WHERE a.identifier = 'person/joseph-valeri' and b.identifier = 'conference/edm2008/paper/209' CREATE (a)-[r:creator]->(b)
MATCH (a:Person),(b:InProceedings) WHERE a.identifier = 'person/nell-duke' and b.identifier = 'conference/edm2008/paper/209' CREATE (a)-[r:creator]->(b)
但是如果我立即执行它们,我会得到以下错误:

WITH is required between CREATE and MATCH (line 2, column 1)
我应该包含哪些更改?
(我是Neo4j的新手)

这需要在单个事务中发生吗?在这种情况下,您应该在执行创建之前预先匹配节点:

MATCH (jo:Person{identifier:'person/joseph-valeri'}), (nell:Person{identifier:'person/nell-duke'}), (b:InProceedings{identifier:'conference/edm2008/paper/209'}) 
CREATE (jo)-[:creator]->(b), (nell)-[:creator]->(b)
如果只是两个创建者,您可以将创建更改为:

CREATE (jo)-[:creator]->(b)<-[:creator]-(nell)
你会一直跟踪a,b。。Python脚本中的zzz允许您使用以下内容构建
CREATE
station:

(a)-[:creator]->(inProcA), (zzz)-[:creator]-(inProcB)
现在,如果您的所有节点都已经存在,并且您现在只想在中构建关系,那么您可以选择:

  • 为每个新关系执行单独的
    匹配
    创建
    s,将它们分别排除。这看起来像是您的原始代码所做的。您应该将条件移动到
    MATCH
    中,而不是
    WHERE
    子句中
  • 匹配
    ing大量节点并
    创建
    ing新关系。这与我最初的代码所做的更为相似,需要您的脚本能够智能地生成查询
  • 将现有节点合并到新关系中

  • 无论您做什么,您都需要在事务中批处理写操作,否则您将耗尽内存-您可以建议Neo4J使用
    使用PERIODIC COMMIT 50000
    语法来执行此操作,这是一个很好的方法。

    谢谢,但我的问题是,我使用Python将一个大数据集转换为cypher。因此,输出将生成这些查询,这些查询将运行数百万行。因此,我不能有像jo和nell这样的变量,因为它必须是自动化的。另外,b.identifier在不同的查询中有不同的值,这就是为什么您的问题不能充分描述您的问题。您使用术语“生成这些查询”,但在问题中一次运行两个查询。您可以生成一个大规模的
    CREATE
    语句,该语句将枚举您的所有节点和关系(请参见示例),但对于数百万人来说,您不想这样做,应该查看批导入。很好,谢谢。我会尝试一下,如果我没有得到正确的答案,我会回复。我写了一整晚的py脚本,现在一切正常。谢谢。谢谢@BhargavRao,太棒了!
    (a)-[:creator]->(inProcA), (zzz)-[:creator]-(inProcB)