Neo4j Cypher如何为最短路径上的节点设置属性
我是neo4j和cypher的新手,大约有一周的经验。。。我正在做一个小项目,用我公司的大型机上运行的成百上千个TWS批处理作业的图表进行操作。关键任务是找出午夜最后一批批作业的关键路径,这实际上是neo4j中加权最短路径。我已经用下面的密码实现了这个目标Neo4j Cypher如何为最短路径上的节点设置属性,neo4j,cypher,neo4j-apoc,Neo4j,Cypher,Neo4j Apoc,我是neo4j和cypher的新手,大约有一周的经验。。。我正在做一个小项目,用我公司的大型机上运行的成百上千个TWS批处理作业的图表进行操作。关键任务是找出午夜最后一批批作业的关键路径,这实际上是neo4j中加权最短路径。我已经用下面的密码实现了这个目标 MATCH (a:Job {Jobname:...}),(b:Job {Jobname:...}) call apoc.algo.dijkstra(a,b,'runafter>','Duration') YIELD path, wei
MATCH (a:Job {Jobname:...}),(b:Job {Jobname:...})
call apoc.algo.dijkstra(a,b,'runafter>','Duration') YIELD path, weight
RETURN path,weight`
我用neo4j驱动程序创建了一个python,它每天自动运行,从rbdms中提取批处理作业数据,每天在neo4j中创建一个新图形,运行密码并格式化结果密钥路径以适合我的MySQL,这样我就可以比较每一天的密钥路径
但是我想到了一个新的想法,如果我可以增强这个密码,使返回路径上的节点设置一个标签/或一个属性呢?这样我以后就可以轻松地再次引用密钥路径,而无需每次调用Dijkstra。我知道我可以使用我的python程序来完成这项工作,就在关键路径返回并生成一系列密码来完成这项工作之后,但我认为应该有一个单独使用密码的解决方案。提前多谢
由于您使用apoc,您可以:
另一种方法是添加类似于
计算路径的节点:
MATCH (a:Job {Jobname:...}),(b:Job {Jobname:...}) WITH a, b
CALL apoc.algo.dijkstra(a,b,'runafter>','Duration') YIELD path, weight
CREATE (P:CalculatedPath)
SET P.weight = weight,
P.start = ID(a),
P.end = ID(b),
P.pathNodes = REDUCE(ids=[], n IN NODES(path)| ids + ID(n)),
P.pathRels = REDUCE(ids=[], r IN RELS(path) | ids + ID(r))
FOREACH (n IN NODES(path)|
MERGE (n)-[:inPath]->(P)
)
RETURN path, weight
并返回路径:
MATCH (a:Job {Jobname:...}),(b:Job {Jobname:...}) WITH a, b
MATCH (path:CalculatedPath {start: ID(A), end: ID(b)})
RETURN path, path.weight AS weight
非常感谢你!我尝试了所有的密码,他们只是工作的魅力!!这些伟大的例子真的帮助我更好地理解了cypher和neo4j的力量。。。再次感谢!
MATCH (a:Job {Jobname:...}),(b:Job {Jobname:...}) WITH a, b
CALL apoc.algo.dijkstra(a,b,'runafter>','Duration') YIELD path, weight
CREATE (P:CalculatedPath)
SET P.weight = weight,
P.start = ID(a),
P.end = ID(b),
P.pathNodes = REDUCE(ids=[], n IN NODES(path)| ids + ID(n)),
P.pathRels = REDUCE(ids=[], r IN RELS(path) | ids + ID(r))
FOREACH (n IN NODES(path)|
MERGE (n)-[:inPath]->(P)
)
RETURN path, weight
MATCH (a:Job {Jobname:...}),(b:Job {Jobname:...}) WITH a, b
MATCH (path:CalculatedPath {start: ID(A), end: ID(b)})
RETURN path, path.weight AS weight