私はチェストーナメントのシンプルなモデルを持っています。それは5人のプレイヤーがお互いにプレイしています。Neo4jグラフの余分な双方向関係を削除する
グラフは、一般的に細かいですが、さらに検査時に、あなたは両方のセット
Guy2対Guy1は、Guy5
対
と
Guy4を持っていることを見ることができます:グラフは次のようになります冗長な関係。
問題は、これらのマッチ(したがって、これは、基礎となるCSVデータ品質の問題である意味で)の各々に対して外来相補的な行があるデータには明らかである。
私は手でこれらの行をきれいにすることができましたが、実際のデータセットは何百万行もあります。だから私は、私はCQLを使用して、2つのいずれかの方法でこれらの関係を削除する可能性がどのように思ったんだけど:
1)
2最初の場所
内の余分な関係に読まないでください)先に行くと、余分なを作成します関係を削除しますが、後で削除します。これに関するアドバイスをありがとうございます。
私が使用しているコードは、このです:
/ Here, we load and create nodes
LOAD CSV WITH HEADERS FROM
'file:///.../chess_nodes.csv' AS line
WITH line
MERGE (p:Player {
player_id: line.player_id
})
ON CREATE SET p.name = line.name
ON MATCH SET p.name = line.name
ON CREATE SET p.residence = line.residence
ON MATCH SET p.residence = line.residence
// Here create the edges
LOAD CSV WITH HEADERS FROM
'file:///.../chess_edges.csv' AS line
WITH line
MATCH (p1:Player {player_id: line.player1_id})
WITH p1, line
OPTIONAL MATCH (p2:Player {player_id: line.player2_id})
WITH p1, p2, line
MERGE (p1)-[:VERSUS]->(p2)
これはあなたの問題とは直接関係しませんが、これらのクエリには無関係の節がたくさんあります。 1.「ON CREATE blah」/「ON MATCH blah」ペアは、単なる「blah」で置き換えることができます。 2.「WITH」節はどの目的にも役立ちません。削除することができます。 – cybersam
#1の場合、どのような構文が適していますか? –
'MERGE'が新しいノードを作成したか既存のノードにマッチしたかにかかわらず、まったく同じ' SET'演算を実行したいので、 'ON MATCH'と' ON create'をまったく使用しないでください。 2つの異なる 'SET'操作を直接実行してください:' SET p.name = line.name、p.residence = line.residence'。 – cybersam