2015-11-09 18 views
4

我导入了一个包含数千个设备的表格。然后导入另一张包含大约20种类型设备的表格。如何避免密码查询中的笛卡尔积,并仍然在对象之间创建链接?

当我在下面编写密码查询来关联它们时,Neo4j警告了我一个笛卡尔积。有没有更好的方法来创建关联?我应该在CSV导入期间完成这项工作吗?

MATCH (te:Equipment_Type),(e:Equipment) 
WHERE te.type_id = e.type_id 
CREATE (e)-[:TYPE_OF]→(te) 

更新

我tryed什么布赖恩sugested,CSV导入过程中,和工作就像一个魅力。

  1. 首先导入设备类型;
  2. 然后在设备上创建和索引(type_id);
  3. 修改了在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) 

回答

2

随着数据的,你在谈论它的大小不是一个大问题,特别是如果你有Equipment_Type:type_idEquipment:type_id指标。它会警告你,因为当你首先在一个小数据集上写一个笛卡尔项目时,查询中的笛卡尔项目看起来很快,然后随着你获得更多的数据而快速增长。

但是,在CSV导入过程中创建关系可能是最好的方法。