「開始ノードと最後のエッジが既知であり、終了ノードを見つける」というパターンは、Cypher で次のように記述できます。
START a=node:nodeIndex({indexQueryParam})
MATCH a-[?*]->()-[:SHARES]->d
RETURN d
は?
、パターンのこの部分はオプションであり*
、任意の長さにできることを示しています。可変長はゼロの長さを意味する可能性があるため、両方が必要なわけではありませんが、パターンをさらに肉付けするときは両方を念頭に置いてください。ノードは実際には必要B
ないので、バインドする必要はありません。空の括弧でかまいません。
ただし、このパターンは非常に一般的であり、データによっては費用がかかる場合があります (ダイナマイトで釣りをするのと少し似ています)。KNOWS
グラフで見つかると予想される他の関係タイプの例を示しますLIKES
。パターンを指定するために導入できるものはすべて、クエリのパフォーマンスを向上させます。
MATCH a-[?:KNOWS|LIKES*]->()-[:SHARES]->d
または、これらがどの順序で発生するかを知っている場合
MATCH a-[?:KNOWS]->()-[LIKES*]->()-[:SHARES]->d
ここでKNOWS
は、パターンの一部の深さは 1 つだけですが、その部分の深LIKES
さは 0 から無限大です。パーツはオプションです。KNOWS
つまり、a
このオプション パーツを介してリンクされたパターンのパーツ全体もオプションです。
最後に、変数の深さの範囲を 0 から無限大にすることは、通常は良い考えではありません。次のように、データにとって意味のある上限または下限を導入します
MATCH a-[?:KNOWS]->()-[LIKES*1..4]->()-[:SHARES]->d
データで見つけた(または課した)パターンを見て、それに応じて暗号クエリパターンを開発し、常にできるだけ多くの暗号パターンを指定し、埋めたい部分だけを未定義のままにする必要があります。グラフで。