我导入了一个包含数千台设备的桌子。然后导入另一个包含设备类型的表,其中包含大约20种类型。
当我写下面的密码查询来关联它们时,Neo4j警告我一个笛卡尔积。有没有更好的方法来创建关联?我应该在CSV导入期间完成吗?
MATCH (te:Equipment_Type),(e:Equipment)
WHERE te.type_id = e.type_id
CREATE (e)-[:TYPE_OF]→(te)
更新
在CSV导入期间,我尝试了布莱恩所吮吸的东西,并且像魅力一样工作。
来自Neo4j控制台:
添加了100812个标签,创建了100812个节点,设置了414307个属性, 创建了100812个关系,声明在33902毫秒内执行。
守则:
CREATE INDEX ON :Equipment(type_id)
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "http://localhost/Equipments.csv" AS row
MERGE (e:Equipment {eqp_id: row.eqp_id, name: row.name, type_id: row.type_id})
WITH e, row
MATCH (te:Equipemnt_Type)
WHERE te.type_id = row.type_id
CREATE (e)-[:TYPE_OF]->(te)
答案 0 :(得分:2)
根据您所谈论的数据大小并不是什么大问题,特别是如果您有Equipment_Type:type_id
和Equipment:type_id
的索引。它会警告你,因为当你第一次在一个小数据集上编写一个笛卡尔项目时,它看起来会很快,然后随着你获得更多数据而快速增长。
但是,是的,在CSV导入期间创建关系可能是接近它的最佳方式。