neo4j查询路径

时间:2013-07-22 20:09:40

标签: neo4j cypher

我的图表中有以下节点:

Car

Trash

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

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

我正试图找到一个查询,它将为我提供两种类型之间的所有最短路径,即

(汽车) - [has_input] - (CarToTrash) - [has_output] - (垃圾箱) - [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;

1 个答案:

答案 0 :(得分:0)

由于您希望在最短路径路段中使用结构,我相信这个算法不适合您。

我应该设置你自己的遍历算法,并使用Java API来实现它,基于http://docs.neo4j.org/chunked/stable/tutorial-traversal-java-api.html,这比现在的Cypher提供了更多的灵活性。