neo4j存储节点具有的边数,以作为关系的归因(一种使图形加权的方式)

时间:2019-02-27 12:40:34

标签: neo4j

this is how the situation looks like, in this example, I want to have a weight of 4 on each edge, then I can delete the duplicates and like this I can have the graph weighted for my situation我想计算图中每个节点的重复边数,然后将该数字放在一个边上以使图加权。

有没有可以帮助我实现这一目标的查询?

2 个答案:

答案 0 :(得分:0)

您可以尝试类似的方法:

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});

答案 1 :(得分:0)

通过修改此查询 在大小((n)-[:AGGREGATED]->())= 0 AND大小((n)->())> 0的情况下匹配(n) n限制为1000   匹配(n)-[r]->(m)   WITH n,m,count(r)AS计数     创建(n)-[:总计{weight:count}]->(m)     返回计数(*);

我通过以下查询到达了想要的地方

可选匹配(u:疾病)-[r:HAS_CHILD]->(o:疾病)与u,o,count(r)计数创建(u)-[r:HAS_CHILD {weight:count}]- >(o)返回u,r,o;

THE RESULT AFTER DELETING DUPLICATES RELATIONSHIPS