查询花费了很长时间的neo4j来合并关系

时间:2019-09-26 02:58:27

标签: database neo4j cypher

LOAD CSV FROM 'file:///relationships.tsv' as row
FIELDTERMINATOR '\t'
WITH row
MATCH (a:actor {id: row[2]}), (b:movie {id: row[0]}) MERGE (a)-[r:ACTED_IN]->(b)

看起来像这样的文件:

tt0015637   8   nm0166876   actor   \N  ["Bull Harding"]
tt2450056   2   nm0000616   actor   \N  ["Dr. Mc Millan"]
tt1053424   1   nm0000179   actor   \N  ["Remy"]
tt0062535   1   nm0176061   actor   \N  ["Ric"]
tt0016908   3   nm0384944   actor   \N  ["Capt. Blackwell"]
tt0020459   4   nm0176971   actor   \N  ["Pete"]
tt1300155   1   nm1497548   actor   \N  ["Moon Blake"]

row [0]是电影的ID。 row [2]是演员的ID

此外,我还希望row [3]仅作为演员。有时候会出现

tt0033839   5   nm0377613   director    \N  \N

我希望row [3]仅是我尝试过的演员

LOAD CSV FROM 'file:///relationships.tsv' as row
FIELDTERMINATOR '\t'
WITH row
MATCH (a:actor {id: row[2]}), (b:movie {id: row[0]}) MERGE (a)-[r:ACTED_IN]->(b)
WHERE row[3] == 'actor'

但这给了我Neo.ClientError.Statement.SyntaxError:无效的输入'H':预期的'i / I'(第5行,第2列(偏移量:161)) “ WHERE row [3] =='actor'

我添加了所有具有与电影相同的属性名称和ID的演员。

为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

确保已在:actor(id):movie(id)上创建了索引。

并将WHERE语句放在WITH语句之后,因此首先您将过滤行,然后执行操作。

相关问题