我是cypher/neo4j的新手,我有两个表,“site”和“visit”,它们已经以正确的数据类型加载到neo4j中。“site”表包含一个名为“id”的主键。“visit”表包含一个名为“id”的主键和一个名为“site_id”的指向“site”表的外键。我想在这些键之间创建一个关系。下面是我所做的尝试:
LOAD CSV WITH HEADERS FROM 'file:///site.csv' AS row
MATCH (v:visit {site_id: row.site_id}), (s:site {id: row.id})
MERGE (s)-[rel:visited {site_id:row.id}] ->(v)
RETURN count(rel)
和
MATCH (s:site), (v:visit)
WHERE s.id = id AND v.id = site_id
CREATE (s)-[r:visited] ->(v)
RETURN count(r)
错误:“变量id
未定义(第2行,第14列(偏移量:39))“WHEREs.id标识ANDv.id标识””
以及
MATCH (v:visit {site_id:v.site_id})
MATCH (s:site {id:s.id})
MERGE (v) - [:visited] ->(s)
return s
此查询:“Java堆空间”错误。
site表包含7,963个唯一的站点(id),visit表包含18,513次访问。通过简单地在表(id)和访问(site_id)之间创建一个关系,这是否足够大的表来呈现该错误?
我对cypher的结构仍然有点困惑,我认为我的MERGE语句是不正确的。当我运行这个语句时,count(rel)没有返回任何结果,也没有创建任何关系。为什么没有创建关系,MERGE语句到底在做什么?
1条答案
按热度按时间xienkqul1#
此查询有逻辑错误:
您正在尝试将
site
与id
进行匹配,而s
本身还没有计算出来。这就是为什么会出错的原因,访问量也是如此。如果您的site
和visits
数据已经加载,请尝试以下操作: