我有一批关系的属性值存在问题,固定一个值,需要更新为null,不能确定是哪些节点的关系,有没有办法快速的将这批关系属性更新掉; 关系属性不能创建索引,根据关系属性查找很慢。
关系索引 可以通过 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})
太棒了,非常感谢!!! 我这边数据量比较大,这类关系有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 会有性能上的差别吗!
问题应该在这里
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"
这里
批量一遍遍跑,每一遍都很慢
@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}) ;