0

我的图中有以下节点:

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]-(Car)

路径的长度可能会有所不同。它可以有更多的节点,如 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;
4

1 回答 1

0

由于您希望最短路径路径段中的结构,我相信这个算法对您不可用。

我可能应该根据http://docs.neo4j.org/chunked/stable/tutorial-traversal-java-api.html设计您自己的遍历算法,并使用 Java API 来完成它,这为您提供了更大的灵活性比这里的当前 Cypher。

于 2013-07-24T12:54:11.140 回答