Cypher慢慢地与某些类型的节点建立关系

时间:2018-02-15 04:01:13

标签: neo4j cypher

我有一种类型的节点和一种关系。

USING PERIODIC COMMIT 500
load csv from 'http://host.int:8787/rel_import.csv' as line FIELDTERMINATOR ';'
match(c1)
with c1,line, trim(line[0]) as abs1, trim(line[1]) as abs2
match(c2)
where (c1.abs = abs1 and c2.abs = abs2) or (c1.abs = abs2 and c2.abs = abs1) 
create (c1)-[rel:relations{abs1:line[0], abs2:line[1], kind:line[2],personId:line[3], rel_k1:line[4], rel_k2:line[5],contact:line[6], id:line[7]}]->(c2)

所以,它很快。

我划分了一个类型节点(现在有五种类型,旧类型已删除,实体的摘要计数未更改),并且速度创建关系存在问题。节点结构未更改,为所有类型创建索引。

怎么做对?

2 个答案:

答案 0 :(得分:0)

我认为问题是你的联接中的where子句很复杂。我发现复杂的连接子句导致它非常慢。你能做到:“c1.abs<> c2.abs?”

答案 1 :(得分:0)

你能做这样的事情:

USING PERIODIC COMMIT 500
load csv from 'http://host.int:8787/rel_import.csv' as line FIELDTERMINATOR ';'
with line, trim(line[0]) as abs1, time(line[1] as abs2
match(c1{abs: abs1})
match(c2 {abs:abs2})
match c3 {abs: abs2})
match c4 {abs: abs1})
where c1.abs <> c2.abs and c3.abs <> c4.abs
create (c1)-[rel:relations{abs1:line[0], abs2:line[1], kind:line[2],personId:line[3], rel_k1:line[4], rel_k2:line[5],contact:line[6], id:line[7]}]->(c2)
create (c3)-[rel:relations{abs1:line[0], abs2:line[1], kind:line[2],personId:line[3], rel_k1:line[4], rel_k2:line[5],contact:line[6], id:line[7]}]->(c4)

如果可能,我会分解match c1, c2match c3, c4并运行两次加载CSV,我发现在LOAD CSV中执行更少步骤时效果最佳。