Neo4j 使用参数创建或合并关系

Neo4j 使用参数创建或合并关系,neo4j,cypher,py2neo,Neo4j,Cypher,Py2neo,我经常在现有节点之间添加大量关系,我想知道参数是否可以提高性能。到目前为止,我通过构建单独的密码字符串并在密码事务中提交它们来实现这一点(使用py2neo 1.6.4) 查询如下所示: MATCH (a:Label1 {name: 'value'}), (b:Label2 {name: 'value'}) MERGE (a)-[r:RELATES {name: 'foo', value: 'bar'}]->(b) RETURN r 参数会提高性能吗?如何在此查询中使用参数 我尝试在整个查

我经常在现有节点之间添加大量关系,我想知道参数是否可以提高性能。到目前为止,我通过构建单独的密码字符串并在密码事务中提交它们来实现这一点(使用py2neo 1.6.4)

查询如下所示:

MATCH (a:Label1 {name: 'value'}), (b:Label2 {name: 'value'})
MERGE (a)-[r:RELATES {name: 'foo', value: 'bar'}]->(b)
RETURN r
参数会提高性能吗?如何在此查询中使用参数

我尝试在整个查询和传递参数中使用
FOREACH
,但是
FOREACH
中不允许使用
MATCH
。我不知道是否/如何能够参数化
匹配
创建
/
合并

另一种方法是只使用
MERGE
,但如果查询的一部分不匹配,这将创建新节点


更新


我想答案是我不能参数化完整的查询。但是正如Wes Freeman所建议的,如果我为
合并使用参数,即使查询只包含一个关系的一组参数,性能也会提高。

您可以传入一个数组并执行如下操作:

MATCH (a:Label1 {name: {name1}}), (b:Label2 {name: {name2}})
FOREACH (rel in {rels}|
  MERGE (a)-[r:RELATES { name: rel.name, value: rel.value }]->(b)
)
当然,之后很难提取
r

参数:

{
 "name1":"value",
 "name2":"value",
 "rels":[{"name":"foo","value":"bar"}, ...]
}

如果我在相同的节点之间添加许多关系,这将有所帮助。不幸的是,每个关系都在两个不同的节点之间(数据来自nxm矩阵)。因此,我仍然需要每个关系一个查询:)在这种情况下,只需使用事务性API一次一个rel。不过,您应该为值传递参数。事务性API就是我现在正在做的。即使关系的数量没有变化,值的参数也会更快,尤其是在关系的数量没有变化的情况下。它将缓存该语句。