gpt4 book ai didi

Neo4j-密码 : merge duplicate relationships

转载 作者:行者123 更新时间:2023-12-02 11:25:20 25 4
gpt4 key购买 nike

我在节点之间有重复的关系,例如:

A ->{weight: 1} B
A ->{weight: 1} B
A ->{weight: 1} B

我想将这些关系合并为一种形式的关系:A->{weight: 3} B 对于我的整个图表。

我尝试了如下方法:

start n = node(*) 
match (n)-[r:OCCURENCE]->()
Set r.weight = count(*)
count(*)

但是我的图确实很大,并且通过此查询,每个节点 A 和 B 的边都会更新两次。此外,旧的关系不会被删除。不知道如何在一个查询中对这两个方面进行建模。希望有人能帮忙。

编辑:

尝试使用节点()和关系()进行其他一些查询,例如

start n = node(*) match ()-[r:OCCURENCE]->() set n.SumEdgeWeight = sum(r.weight)

他们的处理速度非常慢。当我需要更新所有节点时,还有其他更快的方法吗?我在 Neo4j 社区中找到了这个主题 [1]。我的查询使用 java core api 运行得更快吗?

[1] https://groups.google.com/forum/#!topic/neo4j/4SSxvNsuQsY

问候。

最佳答案

您可以从您所追求的更具体的模式(A-[:OCCURRENCE])开始,而不是从匹配每个节点的非常通用的模式(node(*))开始->B)。这可能会加快速度。

您可以聚合权重值,而不是计算节点以获得聚合权重(您似乎在编辑中朝着这个方向前进,但您将权重聚合设置为节点上的属性)。也许对于您的数据,所有关系的权重都是 1,如果是这样,某种计数可以工作(您可以尝试计算关系而不是节点),但可能值得进行一个不会产生正确结果的查询偶然。这样的查询也适用于不同的权重值,例如,如果您将来导入更多数据并且需要将新的 [OCCURRENCE] 关系(权重可能为 1)与已经存在的关系合并合并并就位。

你能尝试这样的事情吗?

MATCH (A)-[r:OCCURRENCE]->(B)
WITH A, COLLECT(r) as oldRels, B, SUM(r.weight) as W
FOREACH(r IN oldRels | DELETE r)
WITH A, W, B
CREATE (A)-[O:OCCURRENCE {weight:W}]->(B);

我认为这个查询的意思是:对于图中的所有A-[r:OCCURRENCE]->B模式,COLLECT关系并带来该集合WITH 以便稍后可以将其删除。还要带上相关节点的 WITH 以及关系权重的 SUMFOREACH 旧关系,将其删除,并仅引入 WITH 两个节点和聚合权重。创建新关系并将权重设置为聚合权重。

关于Neo4j-密码 : merge duplicate relationships,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18724939/

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