使用参数创建或合并关系

时间:2014-07-01 21:48:18

标签: neo4j cypher py2neo

我经常在现有节点之间添加大量关系,我想知道参数是否可以提高性能。到目前为止,我通过构建单独的Cypher字符串并在Cypher事务中提交它们(使用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并传递参数,但MATCH中不允许使用FOREACH。我不知道是否/如何参数化MATCHCREATE / MERGE

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


更新

我认为答案是我无法参数化完整的查询。但是,如果我使用MERGE的参数,Wes Freeman建议性能提高,即使查询只包含一组关系的一组参数。

1 个答案:

答案 0 :(得分:0)

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

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"}, ...]
}