Neo4j Cypher 2.0:通过params进行批量匹配 - 关系

时间:2014-03-06 17:10:30

标签: neo4j neo4jclient

此问题与此类似:create relationships between nodes in parallel和此Neo4j: Best way to batch relate nodes using Cypher?

我想使用Cypher查询和Neo4jClient(Neo4j的c#客户端)参数化批处理来创建关系。

我如何写出来(特别注重性能) - 即仅使用match和create语句而不是Merge,因为合并因某种原因导致超时?

我以为我可以做这样的事情(如第二条SO链接所述)

MATCH (s:ContactPlayer {ContactPrefixTypeId:{cptid}})
MATCH (c:ContactPrefixType {ContactPrefixTypeId:{cptid}})
CREATE c-[:CONTACT_PLAYER]->s

用params:

{
    "query":...,
    "params": {
        "cptid":id1
     }
}

但这不起作用,因为它试图将该属性与数组匹配。

我将其修改为使用WHERE x.Y IN {params},但这非常慢。第二个建议是尝试使用Neo4j的事务端点,但我不确定如何使用Neo4jClient。

这是上面第二条SO链接的建议:

{
    "statements":[
        "statement":...,
        "parameters": {
            "cptid":id1
        },
        "statement":...,
        "parameters": {
            "cptid":id2
        }
    ]
}    

我确实看到了这个拉取请求,但没有看到它已经实现了:https://github.com/Readify/Neo4jClient/pull/26

如果没有交易支持,还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

使用以下查询时的效果如何?

USING PERIODIC COMMIT 1000
MATCH (s:ContactPlayer), (c:ContactPrefixType)
WHERE s.ContactPrefixTypeId = c.ContactPrefixTypeId
CREATE c-[:CONTACT_PLAYER]->s

如果您想试用periodic commit声明,那么您现在必须使用版本2.1.0-M1。否则,你可以把它留下来。