グラフには次のノードがあります。
Car
Trash
CarToTrash
[:has_input]-(Car)
[:has_output]-(Trash)
RecycleTrash
[:has_input]-(Trash)
[:has_output]-(Car)
2つのタイプ間のすべての最短パスを提供するクエリを見つけようとしています。つまり
(Car)-[has_input]-(CarToTrash)-[has_output]-(Trash)-[has_input]-(RecycleTrash)-[has_output]-(Car)
ただし、パスの長さは異なる場合があります。has_input と has_output 関係を持つ XToY のようなノードをさらに持つことができます。グラフに追加する可能性のある 2 つの型の間の最短経路を見つけたいと思います。CarToTrash と RecycleTrash は関数を表し、関係 has_input と has_output は関数の入力型と戻り値の型です。基本的に、私が持っているのは型と関数のグラフです。グラフ内の任意の 2 つの型の間に関数のパスがあるかどうかを確認したいと思います。
私は次のクエリを試してみましたが、これはある程度機能しますが、パターン 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;