【问题标题】:Merging two nodes running endlessly in Neo4j合并在 Neo4j 中无限运行的两个节点
【发布时间】:2022-09-23 15:45:08
【问题描述】:

我是 neo4j 的新手,我正在尝试合并两个节点,如下所述:

MATCH (n:node2) MERGE (p:node1 {p.id:n.id}) ON CREATE SET p.column1=n.column1,p.column2=n.column2, p.column3=n.column3,p.column4=n.column4,p.column5=n.column5,p.column6=n.column6, p.column7=n.column7 在匹配集上 p.column1=n.column1,p.column2=n.column2, p.column3=n.column3,p.column4=n.column4,p.column5=n.column5,p.column6=n.column6, p.column7=n.column7;

Node1 包含 200 万个节点,8 个属性,node2 包含 184000 个节点,8 个属性。

我正在尝试将 node2 记录与 node1 合并,但这种合并会无休止地运行。有没有办法在更短的时间内运行这个合并命令?

    标签: merge neo4j


    【解决方案1】:

    当 node1 中不存在 node2.id 时,您将 node2 复制到 node1 中,并在 node2 中找到时更新 node1 中的列值(属性)。简而言之,您需要在 node1 中找到未找到的 node2 然后进行合并。

    MATCH (n:node2) 
    WHERE NOT EXISTS( (:node1 {id: n.id})--() ) 
    WITH n
    MERGE (p:node1 {id:n.id})    //I fix a typo error. It should be id and not p.id
    SET p += properties(n)
    

    如果执行时间仍然很长,请安装APOC功能并在下面运行。它将按 10k 批次进行合并。

    call apoc.periodic.iterate(
        "
        MATCH (n:node2) WHERE NOT EXISTS( (:node1 {id: n.id})--() ) 
        RETURN n
        ",
        "
        WITH n
        MERGE (p:node1 {id:n.id})
        SET p += properties(n)
        ",
        {batchSize:10000}
    )​
    

    【讨论】:

      【解决方案2】:

      为了加快MERGE 的速度,您应该在node1 标签节点上为键id 创建一个索引。像这样:

      CREATE INDEX id_index IF NOT EXISTS FOR (n:node1) ON (n.id)
      

      其次,您的查询可以简化一点,而不是像这样手动设置每个属性,在ON CREATEON MERGE 中:

      MATCH (n:node2) 
      MERGE (p:node1 {id:n.id}) 
      ON CREATE SET p.column1=n.column1,p.column2=n.column2, p.column3=n.column3,
      p.column4=n.column4,p.column5=n.column5,p.column6=n.column6, p.column7=n.column7 
      ON MATCH SET p.column1=n.column1,p.column2=n.column2, 
      p.column3=n.column3,p.column4=n.column4,
      p.column5=n.column5,p.column6=n.column6, p.column7=n.column7;
      

      你可以简单地这样做:

      MATCH (n:node2) 
      MERGE (p:node1 {id:n.id}) 
      SET p += properties(n)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多