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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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最短路径_Neo4j_Max_Cypher_Shortest Path - Fatal编程技术网

具有最高聚合关系属性的Neo4j最短路径

具有最高聚合关系属性的Neo4j最短路径,neo4j,max,cypher,shortest-path,Neo4j,Max,Cypher,Shortest Path,我想找到两个节点之间的最短路径。路径本身不是问题。。。更大的问题是,我想返回路径,其中路径上的聚合关系属性最高 为了更好地理解,以下是我想要的: 这是我的问题 MATCH (startNode:Person {id:"887111"}), (endNode:Person {id:"789321"}), paths = allShortestPaths((startNode)-[r:KNOWS *..20]-(endNode)) RETURN paths 在本例中,我希望得到从El

我想找到两个节点之间的最短路径。路径本身不是问题。。。更大的问题是,我想返回路径,其中路径上的聚合关系属性最高

为了更好地理解,以下是我想要的:

这是我的问题

MATCH
  (startNode:Person {id:"887111"}),
  (endNode:Person {id:"789321"}),
  paths = allShortestPaths((startNode)-[r:KNOWS *..20]-(endNode))
RETURN paths

在本例中,我希望得到从Elissa(id:887111)到Kasey(id:789321)的路径,其中关系的聚合计数为MAX。 我也看过《最短路径》,它只给了我一条路径。另一种方法是调用'dijkstra'-algo,这样我只会得到“成本”最低(而不是最高)的路径。 所以在我的例子中,唯一应该显示的路径是Elissa->Travon->Kasey

我想,问题并没有那么复杂,但目前我已经被这个问题绊倒了

先谢谢你


更新 调用建议的查询后

MATCH  (startNode:Person {id:"789321"}), (endNode:Person {id:"887111"}) 
CALL apoc.algo.dijkstra(startNode, endNode, 'KNOWS', '_duration') YIELD path, weight 
RETURN path, -weight AS weight
我的结果如下

[更新]

我给出两个答案,取决于你想做什么

1.寻找总权重最大的路径 要找到总权重最大的路径,可以将原始权重属性的求反输入到Dijkstra算法。结果“最低”总重量将为负值,如果为负值,则实际为最高总重量(基于原始重量属性)

有一个实现Dijkstra算法的APOC过程,但它不允许使用指定权重属性的负值。因此,要使用该过程,需要为每个
KNOWS
关系添加一个新属性,并使用适当的负值。例如,要将负权重添加到现有关系中(假设
w
是原始权重属性,
\u w
将包含相应的负值):

获得负权重后,以下内容将为您提供具有最大权重的路径:

MATCH (startNode:Person {id:"887111"}), (endNode:Person {id:"789321"})
CALL apoc.algo.dijkstra(startNode, endNode, 'KNOWS', '_w') YIELD path, weight
RETURN path, -weight AS weight;
2.从最短路径中选择总权重最大的路径
好啊声音很好,但我已经测试过了,我想知道,有人提出了一条完全不同的道路。。。dijkstra算法为Elissa->Kasey提供了另一种方法,但是使用了更高的计数(参见原始帖子中的更新)
apoc.algo.dijkstra
过程支持无向关系模式(没有“>”或"你是对的……尽管如此,我还是更新了我的原始答案和帖子,因为仍然有一个错误和一个新的错误。根据你的neo4j浏览器版本,你可能在结果窗格的右下角有一个自动完成开关。关闭该开关,这样它就不会显示你的密码结果中没有的内容lts。或者,使用
表格
文本
代码
选项卡查看实际结果。此外,根据提供的数据,我无法重现您的问题。您可能需要升级到neo4j和apoc插件的最新版本。
MATCH (startNode:Person {id:"887111"}), (endNode:Person {id:"789321"})
CALL apoc.algo.dijkstra(startNode, endNode, 'KNOWS', '_w') YIELD path, weight
RETURN path, -weight AS weight;
MATCH
  (startNode:Person {id:"887111"}),
  (endNode:Person {id:"789321"}),
  path = allShortestPaths((startNode)-[:KNOWS *..20]-(endNode))
RETURN path, REDUCE(s = 0, r IN RELATIONSHIPS(path) | s + r.duration) AS weight
ORDER BY weight DESC
LIMIT 1;