tutorial refcard español downloads neo4j cypher

refcard - Cifrado Neo4j: importa CSV y agrega relaciones entre nodos según los valores de csv.



neo4j tutorial (2)

¿Es posible en Cypher crear una relación diferente entre nodos basada en el valor de csv utilizando la funcionalidad de importación?

Por ejemplo: para un dato de csv dado

product_id user_id action 1 1 VIEW 1 2 PURCHASE

Necesito crear un nodo de producto (id_producto), un nodo de usuario (id_usuario) y VER o COMPARAR una relación entre '' usuario '' y nodo de producto en función del valor del campo '' acción '' en csv.

A continuación están los enfoques que probé. Sé que la sintaxis es incorrecta, pero solo para dar una idea de lo que estoy tratando de hacer.

USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file://pathto/product-event.csv" AS csvLine FIELDTERMINATOR '','' MERGE ( prod:Product{pid: toInt(csvLine.product_id)} ) MERGE ( usr:User { cid: toInt(csvLine.userid) }) WITH prod,usr , CASE WHEN csvLine.action =''VIEW'' THEN ''VIEW'' WHEN csvLine.action =''PURCHASE'' THEN ''PURCHASE'' ELSE ''VIEW'' END AS action MERGE (usr)-[:action]->(prod) USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file:///pathto/product-event.csv" AS csvLine FIELDTERMINATOR '','' MERGE ( prod:Product {pid: toInt(csvLine.productid) } ) MERGE ( usr:User { cid: toInt(csvLine.userid) } ) ON CREATE SET prod.created=timestamp() WHERE csvLine.action = ''VIEW'' MERGE (cust)-[:VIEW]->(prod) WHERE csvLine.action = ''PURCHASE'' MERGE (usr)-[:PURCHASE]->(prod)

Puede haber una manera simple de hacerlo. pero no recibo ninguna referencia en línea. Gracias.


No puede tener tipos de relación dinámica. Sin embargo, hay una solución al FOREACH condicionalmente una matriz con 1 o 0 elementos y aplicar FOREACH :

USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file://pathto/product-event.csv" AS csvLine FIELDTERMINATOR '','' MERGE ( prod:Product{pid: toInt(csvLine.product_id)} ) MERGE ( usr:User { cid: toInt(csvLine.userid) }) FOREACH(ignoreMe IN CASE WHEN csvLine.action=''VIEW'' THEN [1] ELSE [] END | MERGE (usr)-[:VIEW]->(prod) ) FOREACH(ignoreMe IN CASE WHEN csvLine.action=''PURCHASE'' THEN [1] ELSE [] END | MERGE (usr)-[:PURCHASE]->(prod) )

Ver también http://www.markhneedham.com/blog/2014/08/22/neo4j-load-csv-handling-empty-columns .


No es exactamente lo que quiere, pero posiblemente sea efectivo:

USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file://pathto/product-event.csv" AS csvLine FIELDTERMINATOR '','' MERGE ( prod:Product{pid: toInt(csvLine.product_id)} ) MERGE ( usr:User { cid: toInt(csvLine.userid) }) MERGE (usr)-[:action {type: csvLine.action}]->(prod) )