Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher如何为最短路径上的节点设置属性_Neo4j_Cypher_Neo4j Apoc - Fatal编程技术网

Neo4j Cypher如何为最短路径上的节点设置属性

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

我是neo4j和cypher的新手,大约有一周的经验。。。我正在做一个小项目,用我公司的大型机上运行的成百上千个TWS批处理作业的图表进行操作。关键任务是找出午夜最后一批批作业的关键路径,这实际上是neo4j中加权最短路径。我已经用下面的密码实现了这个目标

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