特定の関係/エッジに従わないようにするにはどうすればよいですか?特定の関係以外のすべての関係に従います
など。私は:NODE
を持っており、それは:BUDDY
関係を介して別の:NODE
に接続されています。さらに、:NODE
は、:BUDDY
のでないの任意のエッジによって任意の深さの:STUFF
に関係している。各:NODE
のショートカットリレーションを:STUFF
に追加します。ただし、:BUDDIES
の:STUFF
は含まれていません。
(:NODE)-[:BUDDY]->(:NODE)
(:NODE)-[*]->(:STUFF)
私の現在のクエリは次のようになります。私が今まで:NODE
間が、の子ではない直接:BUDDY
関係を追加した場合
1):私はこのクエリを持ついくつかの問題を持っているしかし
MATCH (n:Node)-[*]->(s:STUFF) WHERE NOT (n)-[:BUDDY]->()-[*]->(s) CREATE (n)-[:HAS]->(s)
:NODE
照会は照合のためにその関係を使用します。私は仲間をまったく入れたくないので、これは意図していないかもしれません。
2)neo4jが(:NODE)-[*]->(:STUFF)
と一致し、次にAntiSemiApply
というパターンが(n)-[:BUDDY]->()
であることを説明します。その結果、グラフ全体が一致し、見つかった接続のほとんどが一致しなくなります。これは効果がないと思われ、クエリは私の好きなものよりも遅く実行されます(しかし、主観的にはこれは聞こえるかもしれません)。
で(:NODE)-[*]->(:STUFF)
の深さを制限するのは1つ(悪い)修正です。しかし、私が最悪のシナリオに対してばかげた高い数値を使用しない限り、その深さを保証することはできません。
私は実際にneo4jに特定の関係に従わないように伝えたいと思います。例えば。 MATCH (n:NODE)-[ALLBUT(:BUDDY)*]->(s:STUFF) CREATE (n)-[:HAS]->(s)
。どのように私は許可されたすべての接続を列挙し、それらを|
(本当に速いですが - すべての可能な関係を手動で追跡する必要があります)と接続せずにこれを達成することができますか?
私はグラフの中でより深い ':BUDDY'関係を追加しないと解決策はあります。私はapocを見ます。 – Sim