Neo4jにネストされたツリーが格納されています。各ノードは、他のノードとの関係を(n)-[:CHILD]->(c)
とすることができます。与えられたノードからツリー全体をMATCH (n)-[c:CHILD*]-(m)
で照会できるようにします。ネストされた階層にユーザートラバーサルパスを格納します。
私が問題を抱えているのは、ユーザーがツリーを歩いているときのパスを保存する方法です。たとえば、パスを返すクエリは(user)-[:USER_PATH*]->(node)
となります。
ただし、パスは:CHILD
の行に沿っていなければなりません。ブランチの外側にジャンプすることはできません。あるユーザーのパスは、ある分岐のリーフから別のブランチのリーフにジャンプすることはできません。最初にパスを戻すことなく、フォークが見つかるまでそのパスをバックアップします。
また、私は最短経路は私が望んでいないので、私はユーザーの実際のパスが欲しいので、最短経路は動作するとは思わない。しかし、ユーザーがどの支店からも退職したときに放棄された関係は無視する必要があります。死んだ道を離れることは避けてください。
各ノードを歩いてグラフを更新すると、これらのルールはそのまま維持されます。
新しいブランチにドリルダウンして、それが唯一の兄弟の1つの以上のセットにステップスルーできると想定することができます。しかし、それが来るすべてのブランチはまだ開いているので、兄弟を選択することができます。
私は理解することができますベスト、それはする必要があるということである:限り、それができるよう
- が
:USER_PATH
関係を歩く「好む」 - それは新しいノードに到達するためにそのパスを破るために必要になるまで で
- は、それがどんな新しい関係
- そのパス上でなくなった古い関係を削除を作成するポイント
しかし私はそれを達成する方法を知らない。
私は試行錯誤に時間のトンを過ごし、無駄にグーグルでてきました。
ありがとうございます! =ユーザー
- 赤色ノード:イメージ以下を考える
チェーンのRATIONAL_PATH関係:あなたはそれが現在であるリーフノードのうち、バックアップした場合
だから、それはその最終的に削除します。
またパスが選択された緑色のノードのいずれかに調整するが、既存の維持すべきである:可能な限りのためにタクトでRATIONAL_PATHを。
私はまだ、RATIONAL_PATHの関係がどのような経路になっているのか、どのように生成されているのか、はっきり分かりません。あるいは、あなたは何らかの形でMATCH(n) - [c:CHILD *] - (m)のクエリからそれらを推測しようとしていますか? – InverseFalcon
最終的な結果のように聞こえるのは、RATIONAL_PATHといういくつかのエンドノードとの1つのパスです。ユーザーが探索して戻ったパスをクリーンアップする方法が必要です。それはあなたの後のことですか?私はバックアウトプロセスが作成されていると仮定しています:RATIONAL_PATHの関係は、元のノードに戻る方向(彼らが来た方向の反対)に戻ります。無関係のパスをいつどのように整理しようとしますか? – InverseFalcon
はい、単一です:ルートノードからツリーのいくつかのノードまでのRATIONAL_PATHパス。しかし、彼らがナビゲートするときに逆の方向に戻るのではなく、その関係を削除するだけで、ルートからターゲットへの一方向のノードのパスを提供するために、私はそれまでの関係を削除することを好みますまずは –