怎么快速根据关系属性遍历关系数据
发布于 5 年前 作者 heqian888 1789 次浏览 来自 问答

我有一批关系的属性值存在问题,固定一个值,需要更新为null,不能确定是哪些节点的关系,有没有办法快速的将这批关系属性更新掉; 关系属性不能创建索引,根据关系属性查找很慢。

5 回复

关系索引 可以通过 apoc 的Lucene 建立索引

参考自 关系索引

//需要手动一个个 添加,所以节点太多,需要分批次添加
//添加 
match (p:Person)-[a:ACTED_IN]->(m:Movie) call apoc.index.addRelationship(a, ["roles"]) return count(*)
//查找
CALL apoc.index.relationships('ACTED_IN','roles:"Emil"') YIELD rel,weight
MATCH (p:Person)-[rel]-(movie)
RETURN p,rel,movie

不过只是为了重置属性,有点不合适

不清楚题主的数据量有多少,我觉得 还是批量跑一遍数据比较快一些。

//例如
MATCH (p:Person)-[r:ACTED_IN]-(m:Movie)
where r.type=0
SET r.type=NULL
//数据量大的话,附送我常用的  apoc.periodic.iterate
CALL apoc.periodic.iterate(
  "MATCH (p:Person)-[r:ACTED_IN]-(m:Movie) return r",
  'where r.roles=0  SET r.roles=NULL',
  {batchSize:10000, parallel:true})

吐槽.png

太棒了,非常感谢!!! 我这边数据量比较大,这类关系有2亿左右,关系连接节点也有2亿左右,目前使用下面这个脚本执行,跑一整天还没完 CALL apoc.periodic.commit( ‘match(a:rw)-[r:tz]->(b:gs) where r.czbl = “None” WITH r LIMIT $limit set r.czbl = null RETURN count(*)’, {limit: 10000} ) YIELD updates, executions, runtime, batches RETURN updates, executions, runtime, batches;

apoc.periodic.iterate 跟 apoc.periodic.commit 会有性能上的差别吗!

@heqian888

问题应该在这里
match(a:rw)-[r:tz]->(b:gs) where r.czbl = "None"  WITH r LIMIT 100  return r

你单独跑一下这段代码,应该很慢。因为你慢的点就在 match(a:rw)-[r:tz]->(b:gs) where r.czbl = "None" 这里 批量一遍遍跑,每一遍都很慢

多谢,我尝试下 apoc.periodic.iterate

@lisabiya 再次感谢,老铁666,现在只需要5分钟就行完了,附上执行脚本: CALL apoc.periodic.iterate( “match(a:gs)-[r:tz]->(b:gs) return r”, “where r.czbl = ‘None’ SET r.czbl=NULL”, {batchSize:10000, parallel:true}) ;

回到顶部