2015-11-09 2 views
4

J'ai importé une table avec des milliers d'équipements. Puis importé une autre table avec des types d'équipements, qui contiennent environ 20 types. Lorsque j'ai écrit la requête chiffrée ci-dessous pour les associer, Neo4j m'a mis en garde contre un produit cartésien. Y a-t-il une meilleure façon de créer les associations? Dois-je l'avoir fait lors de l'importation CSV?Comment éviter le produit cartésien dans une requête chiffrée et créer des liens entre les objets?

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

Mise à jour

I tryed ce que Brian sugested, lors de l'importation CSV, et a travaillé comme un charme.

  1. D'abord importé les types d'équipement;
  2. Puis créé et indexé sur Equipment (type_id);
  3. Modification du code à rechercher lors de l'importation au format CSV.

De Neo4j Console:

Ajouté 100812 étiquettes, créé 100812 nœuds, définissez les propriétés 414307, créé 100812 relations, instruction exécutée dans 33902 ms.

Le code:

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) 

Répondre

2

Avec la taille des données que vous parlez ce n'est pas une grosse affaire, surtout si vous avez des index sur Equipment_Type:type_id et Equipment:type_id. Il vous avertit car un projet cartésien dans une requête peut sembler rapide lorsque vous l'écrivez pour la première fois sur un petit jeu de données et que vous le développez rapidement au fur et à mesure que vous obtenez plus de données. Mais oui, créer les relations pendant l'importation CSV serait probablement la meilleure façon de l'aborder.