【问题标题】:Using apoc.periodic.iterate to create new relationships based on calculation in Neo4j使用 apoc.periodic.iterate 根据 Neo4j 中的计算创建新关系
【发布时间】:2018-01-05 17:13:46
【问题描述】:

我对 apoc.periodic.iterate 很困惑,我已在 (s1) 和 (s2) 之间的以下查询中成功使用它来创建新链接 [r:ALL_TRANSFERRED]:

//CREATE WEIGHTED LINK
CALL apoc.periodic.iterate(
"MATCH (s1)-[:TRANSFER]->(s2) WHERE s1 <> s2 RETURN s1,s2", 
"MERGE (s1)-[r:ALL_TRANSFERRED]->(s2) ON CREATE SET r.weight = 1 ON MATCH SET r.weight = r.weight + 1"
, {batchSize:5000, parallel:false,iterateList:true})

但是当我尝试修改权重以添加基于新变量的计算时,它会创建一些额外的节点吗?假设 (s1) 和 (s2) 是与教师有关系的学校,所以我想将学校中的所有教师计算为一个名为 teachers_in_school 的新变量,可以在此计算中使用。我正在尝试:

//CREATE NORMALISED WEIGHTED LINK 
CALL apoc.periodic.iterate(
"MATCH (s1)-[:TRANSFER]->(s2) WHERE s1 <> s2 
WITH s1,s2
MATCH (t:Teacher)-[:HAD]->(c:Contract)-[:WITH]->(s1)
WHERE c.end = 2016
RETURN s1, count(distinct t) as teachers_in_school", 
"MERGE (s1)-[r:ALL_TRANSFERRED]->(s2) ON CREATE SET r.weight = 1 ON MATCH SET r.weight = (r.weight + 1)/teachers_in_school"
, {batchSize:5000, parallel:false,iterateList:true}) 

但是我得到了一些额外的节点,其中包含链接到 (s1) 和 (s2) 的空标签,并且它们之间没有链接 [r:ALL_TRANSFERRED]!

【问题讨论】:

    标签: neo4j graph-algorithm


    【解决方案1】:

    主要问题是您的第一个 iterate 语句没有返回 s2 节点,因此第二个语句最终创建了全新的 s2 节点。

    以下查询的第一条语句返回一个s2s 集合,其中包含每个s1 的所有s2 节点。它还只计算每个s1 的教师一次。第二条语句使用UNWINDs2s 分解为单独的节点,以便单独处理它们。

    CALL apoc.periodic.iterate(
      "MATCH (s1)-[:TRANSFER]->(s2) WHERE s1 <> s2 
       WITH s1, COLLECT(s2) AS s2s
       MATCH (t:Teacher)-[:HAD]->(c:Contract)-[:WITH]->(s1) WHERE c.end = 2016
       RETURN s1, s2s, COUNT(DISTINCT t) as teachers_in_school", 
      "UNWIND s2s AS s2
       MERGE (s1)-[r:ALL_TRANSFERRED]->(s2)
       ON CREATE SET r.weight = 1
       ON MATCH  SET r.weight = (r.weight + 1)/teachers_in_school",
      {batchSize:5000, parallel:false,iterateList:true}
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      相关资源
      最近更新 更多