Я пытаюсь найти самый легкий путь от узла a
до e
на следующем графике:
Результат должен быть 13:
a -> b: 1
b -> c: 3
c -> d: 4
d -> e: 5 (take lighter edge)
----------
13
Я пробовал несколько примеров (например, https://neo4j.com/docs/graph-algorithms/current/algorithms/shortest-path/), но не могу найти правильный запрос.
MATCH (start:LocationNode{name:'a'}), (end:LocationNode{name:'e'})
CALL algo.shortestPath(start, end, 'weight',{write:true,writeProperty:'sssp'})
YIELD writeMillis,loadMillis,nodeCount, totalCost
RETURN writeMillis,loadMillis,nodeCount,totalCost
результат в
╒═════════════╤════════════╤═══════════╤═══════════╕
│"writeMillis"│"loadMillis"│"nodeCount"│"totalCost"│
╞═════════════╪════════════╪═══════════╪═══════════╡
│3 │3 │5 │12.0 │
└─────────────┴────────────┴───────────┴───────────┘
и
MATCH (start:LocationNode{name:'a'}), (end:LocationNode{name:'e'})
CALL algo.shortestPath(start, end, 'weight',{
nodeQuery:'MATCH(n:LocationNode) RETURN id(n) as id',
relationshipQuery:'MATCH(n:LocationNode)-[r:CONNECTED_TO]->(m:LocationNode) RETURN id(n) as source, id(m) as target, r.weight as weight',
graph:'cypher'})
YIELD writeMillis,loadMillis,nodeCount, totalCost
RETURN writeMillis,loadMillis,nodeCount,totalCost
результаты в
╒═════════════╤════════════╤═══════════╤═══════════╕
│"writeMillis"│"loadMillis"│"nodeCount"│"totalCost"│
╞═════════════╪════════════╪═══════════╪═══════════╡
│3 │19 │4 │14.0 │
└─────────────┴────────────┴───────────┴───────────┘
Другие запросы, подобные следующему, даже ничего не возвращают:
MATCH p=(LocationNode{name:'a'})-[:CONNECTED_TO*]->(LocationNode{name:'e'})
RETURN p as shortestPath,
REDUCE(weight=0, r in relationships(p) | weight+r.weight) AS totalDistance
Я хотел бы видеть запрос, который возвращает «13» в качестве решения и в идеале отображает выбранный путь следующим образом:
Как мне этого добиться?
Большое спасибо.