У меня есть простая модель шахматного турнира. Он имеет 5 игроков, играющих друг друга. График выглядит следующим образом:Удалить избыточные двусторонние отношения на графике Neo4j
граф, как правило, хорошо, но при дальнейшем осмотре, вы можете увидеть, что оба набора
Guy1 против guy2,
и
Guy4 против Guy5
есть избыточные отношения.
Проблема, очевидно, в данном, где есть посторонняя комплементарная строка для каждого из этих матчей (так что в некотором смысле это вопрос качества данных в базовом формате CSV):
Я мог бы очистить эти строки вручную, но реальный набор данных имеет миллионы строк. Так что мне интересно, как я могу удалить эти отношения в любой из 2-х способов, с помощью CQL:
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 WITH не предназначено и может быть удалено. – cybersam
Для # 1, какой предпочтительный синтаксис? –
Поскольку вы хотите выполнять точно такие же операции 'SET', независимо от того, создал ли« MERGE »новый узел или сопоставил существующий узел, вы не должны использовать' ON MATCH' и 'ON create' вообще. Просто выполните две разные операции 'SET':' SET p.name = line.name, p.residence = line.residence'. – cybersam