cargar - Neo4J relaciones CSV
csv to neo4j (2)
Soy un novato de Neo4J y tengo un CSV simple con direcciones IP de origen y destino. Me gustaría crear una relación entre nodos con las mismas etiquetas.
Algo así como ... source_ip >> ALERTAS >> dest_ip o al revés.
"dest_ip","source_ip"
"130.102.82.16","54.231.19.32"
"130.102.82.116","114.30.64.11"
"130.102.82.116","114.30.64.11"
...
LOAD CSV WITH HEADERS
FROM "file:///Users/me/Desktop/query_result.csv" AS csvLine
CREATE (alert:Alert { source_ip: csvLine.source_ip, dest_ip: csvLine.dest_ip})
MATCH (n:Alert) RETURN n LIMIT 25
dest_ip 130.102.82.16 source_ip 54.231.19.32
....
Esto funciona bien Mi pregunta es ¿cómo creo la relación entre las etiquetas dentro de las alertas? Lo intenté y fallé un montón de veces. Supongo que tengo que configurar Nodos separados para Fuente y Dest y luego vincularlos, simplemente no estoy seguro de cómo.
¡Gracias por adelantado!
Paz, Tom
Primero crea una restricción como esta, para garantizar la singularidad y acelerar la operación MERGE
.
CREATE CONSTRAINT ON (a:Alert) ASSERT a.ip IS UNIQUE;
Puedes usar tantas instrucciones CREATE
como quieras, y luego MERGE
la relación, así:
LOAD CSV WITH HEADERS
FROM "file:///Users/me/Desktop/query_result.csv" AS csvLine
MERGE (node1:Alert { ip: csvLine.source_ip })
MERGE (node2:Alert { ip: csvLine.dest_ip })
MERGE (node1)-[r:ALERT]->(node2)
Por cierto, te recomiendo usar MERGE
en la mayoría de los lugares para asegurarte de que no termines creando duplicados. En este archivo, una cierta dirección IP puede aparecer varias veces, no desea un nuevo nodo cada vez que se crea, probablemente desee todas las referencias bajo esa dirección IP, por lo tanto, MERGE
aquí en lugar de CREATE
Suponiendo que su modelo de gráfico es algo así como
(: fuente) - [: ALERTA] -> (: Destino)
La siguiente consulta Cypher creará esa relación
LOAD CSV WITH HEADERS FROM "file:///Users/me/Desktop/query_result.csv" AS csvLine
CREATE (source:Source { ip: csvLine.source_ip })-[:ALERTS]->(dest:Destination { ip: csvLine.dest_ip})