neo4j存储节点在关系上作为一个属性的边数(一种使图形加权的方法)
我想计算图中每个节点的重复边数,然后将该数放在一条边上,使图加权neo4j存储节点在关系上作为一个属性的边数(一种使图形加权的方法),neo4j,Neo4j,我想计算图中每个节点的重复边数,然后将该数放在一条边上,使图加权 是否有一个查询可以帮助我实现这一点?您可以尝试以下方法: MATCH (n)-[r]->(m) WITH n, m, count(r) AS count CREATE (n)-[:AGGREGATED { weight:count}]->(m) 但是这个查询根本无法执行,因为您正在处理整个图形,并且可能会将所有数据库都放在RAM中 因此,您必须批处理此查询: MATCH (n) WHERE size((n)-[:
是否有一个查询可以帮助我实现这一点?您可以尝试以下方法:
MATCH (n)-[r]->(m)
WITH n, m, count(r) AS count
CREATE (n)-[:AGGREGATED { weight:count}]->(m)
但是这个查询根本无法执行,因为您正在处理整个图形,并且可能会将所有数据库都放在RAM中
因此,您必须批处理此查询:
MATCH (n) WHERE size((n)-[:AGGREGATED]->()) = 0 AND size((n)-->()) > 0
WITH n LIMIT 1000
MATCH (n)-[r]->(m)
WITH n, m, count(r) AS count
CREATE (n)-[:AGGREGATED { weight:count}]->(m)
RETURN count(*)
您可以反复执行此查询,直到其结果不是0为止。
如果你懒惰,APOC中有一个程序可以做到这一点:
call apoc.periodic.commit("
MATCH (n) WHERE size((n)-[:AGGREGATED]->()) = 0 AND size((n)-->()) > 0
WITH n LIMIT $limit
MATCH (n)-[r]->(m)
WITH n, m, count(r) AS count
CREATE (n)-[:AGGREGATED { weight:count}]->(m)
RETURN count(*)", {limit: 1000});
通过修改此查询
匹配n,其中sizen-[:聚合]->=0和sizen->>0
n限制为1000
匹配n-[r]->m
以n,m,countr作为计数
创建n-[:聚合{weight:count}]->m
返回计数*
我通过下面的查询到达了我想要的位置
可选匹配u:Disease-[r:HAS_CHILD]>o:Disease与u,o,countras count创建u-[r:HAS_CHILD{weight:count}]>o返回u,r,o
您只有一种关系类型还是多种关系类型?我现在使用一种关系,但在使用一种关系完成图形后,我必须再添加一种关系,下一种关系将映射到。我想问您,如果有更多的关系,查询是否会以不同的方式工作?我的查询将统计所有传出的关系,无论其类型如何。看看模式:n-[r]->mI尝试了除最后一个查询之外的其他查询,并且只有在我创建另一种类型的关系时,它们才会工作,我想将计数添加为现有关系HAS_CHILD的属性。感谢您的帮助和兴趣有没有办法修改查询以处理大量数据?