gpt4 book ai didi

neo4j - 删除 Neo4j 图中冗余的双向关系

转载 作者:行者123 更新时间:2023-12-04 20:42:39 27 4
gpt4 key购买 nike

我有一个简单的国际象棋锦标赛模型。它有5个玩家互相比赛。该图如下所示:

enter image description here

该图一般都很好,但经过进一步检查,您可以看到两组
盖伊 1 对盖伊 2,

Guy4 vs Guy5
每个都有冗余关系。

问题显然出在数据中,其中每个匹配项都有一个无关的互补行(因此从某种意义上说,这是底层 csv 中的数据质量问题):

enter image description here

我可以手动清理这些行,但真正的数据集有数百万行。所以我想知道如何使用 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)

最佳答案

很明显,您不需要这种额外的关系,因为它不会向图形添加任何值或权重。

尽管在文档中,但很少有人知道。
MERGE 可用于 undirected 关系,neo4j 将为您选择一个方向(因为关系必须在图中指向)。

文档引用:http://neo4j.com/docs/stable/query-merge.html#merge-merge-on-an-undirected-relationship

如果您是第一次运行,则使用以下语句的示例:

MATCH (a:User {name:'A'}), (b:User {name:'B'}) 
MERGE (a)-[:VERSUS]-(b)

它将创建关系,因为它不存在。但是,如果您第二次运行它,则不会更改或创建任何内容。

我想它会解决您的问题,因为您不必担心事先清理数据,也不必担心事后运行脚本来清理图表。

关于neo4j - 删除 Neo4j 图中冗余的双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com