//LOAD NODES
LOAD CSV WITH HEADERS FROM 'file:///nodes.csv' AS row
MERGE (node:Node {node_id: toInteger(row.node_id)})
ON CREATE SET
node.node_name = row.node_name,
node.is_source = toInteger(row.is_source),
node.is_destination = toInteger(row.is_destination),
node.node_status = toInteger(row.node_status),
node.cost = toInteger(row.cost);
//CREATE RELATIONSHIPS
LOAD CSV WITH HEADERS FROM 'file:///edges.csv' AS row
MATCH (source:Node {node_id: toInteger(row.from_id)})
MATCH (target:Node {node_id: toInteger(row.to_id)})
CREATE (source)-[r:CONNECTIONS {edge_id: toInteger(row.edge_id), cost: toInteger(row.cost), edge_status: toInteger(row.edge_status)}]->(target);
//PROJECT GRAPH
CALL gds.graph.project(
'myGraph',
'Node',
'CONNECTIONS',
{
relationshipProperties: 'cost'
}
)
//RUN K SHORTEST PATH
MATCH (source:Node {node_name: 'SOURCE_7'}), (target:Node {node_name: 'DEST_LOAD'})
CALL gds.shortestPath.yens.stream('myGraph', {
sourceNode: source,
targetNode: target,
k: 5,
relationshipWeightProperty: 'cost'
})
YIELD index, sourceNode, targetNode, totalCost, nodeIds, costs, path
WITH index, sourceNode, targetNode, totalCost, nodeIds, costs, path
RETURN
index,
gds.util.asNode(sourceNode).node_name AS sourceNodeName,
gds.util.asNode(targetNode).node_name AS targetNodeName,
totalCost + reduce(s = 0, nodeId IN nodeIds | s + gds.util.asNode(nodeId).cost) AS totalCostWithNodeCost,
[nodeId IN nodeIds | gds.util.asNode(nodeId).node_name] AS nodeNames,
costs,
nodes(path) as path
ORDER BY index;