Neo4j 在 MERGE ON CREATE 中执行多项操作
Neo4j perform multiple actions within MERGE ON CREATE
在下面的代码片段中,如果 MERGE = ON MATCH,我只想执行 1 个 SET 命令,如果 MERGE = ON CREATE,则执行其余代码(SET、UNWIND、MATCH、MERGE)。
但是,当我在 ON MATCH 过程中分析查询时,我可以看到数据库正在被最后 4 行 UNWIND、MATCH 和 MERGE 命令命中。如果我将它们注释掉,那么数据库命中率会从 6 减少到 2。
有什么方法可以确保最后 4 行在 ON CREATE 过程中仅是 运行,而不是在 ON MATCH 过程中是 运行?我尝试过一些愚蠢的事情,比如将 ON CREATE 下面的所有内容都放在方括号中,或者在两者之间放置一个逗号等 :-)
尝试这样优化的原因是我有 150k+ json 个对象,我正在尝试尽可能加快加载过程。我也需要
谢谢!
PROFILE
CALL apoc.load.json('file:///20220103.json')
//I will be iterating through 150k+ JSON objects here
YIELD value
WHERE value.skills <> []
MERGE (j:Role {roleId: value.roleId})
ON MATCH
SET j.keep=true
ON CREATE
SET j.title =replace(value.title,'&','&'), j.createdDate = datetime(), ...... etc
WITH value,j
UNWIND value.skills AS list
MATCH (s:Skill {name: toLower(list.skillname) })
MERGE (j)-[:HAS_SKILL{value:list.rank}]->(s)
我想你可以像这样过滤掉刚刚创建的行:
WITH value,j
WHERE j.keep IS NULL
UNWIND value.skills AS list
在下面的代码片段中,如果 MERGE = ON MATCH,我只想执行 1 个 SET 命令,如果 MERGE = ON CREATE,则执行其余代码(SET、UNWIND、MATCH、MERGE)。
但是,当我在 ON MATCH 过程中分析查询时,我可以看到数据库正在被最后 4 行 UNWIND、MATCH 和 MERGE 命令命中。如果我将它们注释掉,那么数据库命中率会从 6 减少到 2。
有什么方法可以确保最后 4 行在 ON CREATE 过程中仅是 运行,而不是在 ON MATCH 过程中是 运行?我尝试过一些愚蠢的事情,比如将 ON CREATE 下面的所有内容都放在方括号中,或者在两者之间放置一个逗号等 :-)
尝试这样优化的原因是我有 150k+ json 个对象,我正在尝试尽可能加快加载过程。我也需要
谢谢!
PROFILE
CALL apoc.load.json('file:///20220103.json')
//I will be iterating through 150k+ JSON objects here
YIELD value
WHERE value.skills <> []
MERGE (j:Role {roleId: value.roleId})
ON MATCH
SET j.keep=true
ON CREATE
SET j.title =replace(value.title,'&','&'), j.createdDate = datetime(), ...... etc
WITH value,j
UNWIND value.skills AS list
MATCH (s:Skill {name: toLower(list.skillname) })
MERGE (j)-[:HAS_SKILL{value:list.rank}]->(s)
我想你可以像这样过滤掉刚刚创建的行:
WITH value,j
WHERE j.keep IS NULL
UNWIND value.skills AS list