2013-07-22 4 views
0

У меня есть следующие узлы в моем графике:Neo4j запрос на пути

Car 

Trash 

CarToTrash 
[:has_input]-(Car) 
[:has_output]-(Trash) 

RecycleTrash 
[:has_input]-(Trash) 
[:has_output]-(Car) 

Я пытаюсь найти запрос, который даст мне все кратчайшие пути между этими двумя типами, т.е.

(Car) - [has_input] - (CarToTrash) - [has_output] - (Trash) - [has_input] - (RecycleTrash) - [has_output] - (Автомобиль)

Длина пути может отличаться. Он может иметь больше узлов, таких как XToY с отношением has_input и has_output. Я хотел бы найти кратчайший путь между любыми двумя типами, которые я мог бы добавить к графику. CarToTrash и RecycleTrash представляют функцию и отношение has_input, а has_output - тип ввода и возвращаемый тип функции. В принципе, у меня есть график типов и функций, и я бы хотел проверить, существует ли путь к функциям между любыми двумя произвольными типами в графе.

Я пробовал со следующим запросом, который работает несколько, но он найдет пути, которые не будут следовать шаблону has_input, has_output, если они существуют. Кроме того, я пробовал найти путь из Car обратно в Car, который мне не удалось сделать, я мог найти только Car to Trash, я мог бы обойтись без него, если бы не было возможности запросить такие петли.

MATCH car, trash WHERE car.uid='Car' AND trash.uid='trash' 
WITH car, trash MATCH p = allShortestPaths(car-[*..15]-trash) return p; 

ответ

0

Поскольку вы хотите, чтобы структура в ваших сегментах кратчайшего пути, я считаю, что этот алгоритм вам не подходит.

Возможно, я должен использовать свой собственный алгоритм обхода и использовать Java API для этого, основываясь на http://docs.neo4j.org/chunked/stable/tutorial-traversal-java-api.html, что дает вам еще большую гибкость, чем текущий Cypher.

+0

Спасибо. Будет ли эта функциональность в конечном итоге доступна в Cypher? – user2608171

Смежные вопросы