Neo4jには、切断されたサブグラフの検出や追跡のネイティブサポートがないため、それらを識別するために集中的なフルグラフクエリが必要になるため、実際の問題はこれらのサブグラフを見つけることです。
私は、サブグラフを切断してサブグラフをサブグラフ内の最小のidを持つノードに添付して、this answerに同様の質問を付けるアプローチを提供しました。
一度:サブグラフノードが配置されると、サブグラフに対するバッチクエリを自由に実行できます。
この回答に記載されているように、サブグラフ(新しいサブグラフの作成、サブグラフのマージ、サブグラフの分割)に影響を与えるグラフの変更に追いつくためのアプローチはありません。
EDIT
あなたが持ってたら:切断された各部分グラフに取り付けた部分グラフのノードを、あなたは簡単に部分グラフ上で操作を実行することができます。
あなたは違いを計算するために、このクエリを使用する場合があります。
MATCH (s:Subgraph)-[*]-(subgraphNode)
WITH DISTINCT s, subgraphNode
WITH s, MIN(subgraphNode.value) as minimum, MAX(subgraphNode.value) as maximum
WITH s, maximum - minimum as difference
...
あなたがバッチにそのクエリが必要な場合、あなたはおそらくapoc.periodic.iterate()、APOCの手順を使用したいと思います。いくつかのテストの後
EDIT
は、それは、NODE_GLOBALの一意性を使用して、APOC's Path Expander functionalityのように思える部分グラフ内のすべてのノードを見つけるために、より効率的な手段につながります。
私はそれに応じてリンクされた回答を変更しています。これはサブグラフクエリでどのように動作するのですか:
MATCH (s:Subgraph)
CALL apoc.path.expandConfig(s,{minLevel:1, bfs:true, uniqueness:"NODE_GLOBAL"}) YIELD path
WITH s, last(nodes(path)) as subgraphNode
WITH s, MIN(subgraphNode.value) as minimum, MAX(subgraphNode.value) as maximum
WITH s, maximum - minimum as difference
...
ありがとう、しかし、サブグラフの同じクエリで最小値と最大値を取得する方法を教えてください。 – sjishan
大きなグラフの場合、これらのクエリを組み合わせることはお勧めできません。 Subgraphノードを設定するクエリを、サブグラフ上で操作を実行するクエリから分離する方が良い。 – InverseFalcon
私は、可変パスの一致と比較して、サブグラフ内のノードを選択するより速い手段を発見しました。 APOCのPath Expanderにはこれをスピードアップするオプションがあります。 – InverseFalcon