我经常在现有节点之间添加大量关系,我想知道参数是否可以提高性能。到目前为止,我通过构建单独的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
。我不知道是否/如何参数化MATCH
和CREATE
/ MERGE
。
另一种方法是仅使用MERGE
,但如果查询的一部分不匹配,这将创建新节点。
更新
我认为答案是我无法参数化完整的查询。但是,如果我使用MERGE
的参数,Wes Freeman建议性能提高,即使查询只包含一组关系的一组参数。
答案 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"}, ...]
}