グラフがあります。Neo4jには一連の切断されたグラフがあります。
他の1つのノードにのみ接続されているすべてのノードを削除したい。
したがって、ペアを削除したいのですが、少なくとも3つのノードが何らかの方法で接続されているすべてのグラフを保持します。
データを入力するときにgetまたはcreateメソッドを使用しているので、すべてのデータにインデックスを付ける必要があります。
グラフがあります。Neo4jには一連の切断されたグラフがあります。
他の1つのノードにのみ接続されているすべてのノードを削除したい。
したがって、ペアを削除したいのですが、少なくとも3つのノードが何らかの方法で接続されているすべてのグラフを保持します。
データを入力するときにgetまたはcreateメソッドを使用しているので、すべてのデータにインデックスを付ける必要があります。
これは私が短期間で思いついた解決策にすぎません。ですから、それはおそらく最良のものではありませんが、あなたがアイデアを得て、あなたのケースにそれを適応させるかもしれないことを願っています。
TraversalDescription td = Traversal.description().depthFirst().evaluator(new Evaluator() {
@Override
public Evaluation evaluate(Path path) {
if (path.length() == 1) {
int count = 0;
Iterator<Relationship> it = path.endNode().getRelationships().iterator();
while (it.hasNext()) {
it.next();
count++;
}
if (count == 1) {
count = 0;
it = path.startNode().getRelationships().iterator();
while (it.hasNext()) {
it.next();
count++;
}
if (count == 1) {
return Evaluation.INCLUDE_AND_PRUNE;
} else {
return Evaluation.EXCLUDE_AND_PRUNE;
}
} else {
return Evaluation.EXCLUDE_AND_PRUNE;
}
}
return Evaluation.EXCLUDE_AND_CONTINUE;
}
});
Traverser traverser = td.traverse(**MYNODE**);
このトラバーサル記述は、2つのノードのみを含むすべてのパスを返す必要があります。私はそれをテストしていませんが、アイデアは次のとおりです。パスの開始ノードと終了ノード(長さ1)に複数の関係があるかどうかをチェックします。その場合、パスの終わりにすることはできないため、ペアにはなりません。それ以外の場合は、後でトラバーサーによって返されます。トラバーサルの詳細については、neo4jのドキュメントを確認してください。
現在のデータベースレイアウトでは、データベース内のすべてのノードに対してトラバーサーを実行する必要があります。これは、多くの不必要な反復を行うため、通常は悪い方法です。これを1回だけ行う場合は、今のところ解決策になる可能性があります。この機能を最終的なアプリケーションに統合する場合は、いくつかの関係を追加することをお勧めします(各クラスターをルートノードに接続します)。
ルートノード(id = 0)からデータベース内の各ノードに関係を追加できます。次に、ルートノードから、上からトラバーサルの説明を使用してトラバースします(if(path.length() == 1)
に変更(path.length() == 2)
し、startnodeのカウントチェックを削除します)。次に、1つのトラバーサルで一度にペアですべてのパスを取得します。これははるかに高速です。後で関係を削除することもできます。基本的に、関係を希望どおりに設計できます。クエリまたはトラバーサルでは、特定の関係を常に無視できます。ただし、パフォーマンスを向上させ、トラバーサルの説明を簡単にするために、これらが必要になる場合があります。
それがあなたにいくつかのアイデアを与えることを願っています。
Cypherを使用すると、次のクエリでタスクを実行できます。
start a=node(*)
match a-[r]->b
where length(a--()) = 1 and length(b--()) = 1
delete a,r,b
動作を確認できるリンクは次のとおりです:http://console.neo4j.org/r/1re6t
お役に立てれば!