【发布时间】:2020-03-26 15:19:48
【问题描述】:
Neo4j 版本:3.5.16
你使用什么样的 API/驱动程序:Python API with py2neo to run the query with graph.run()
Py2neo 版本:4.3.0。
大家好,
我正在尝试优化密码查询以检索可变长度路径。
每次数据到达时都会创建图表,并且 startNode 和 endNode 固定在它们的 name 属性上。创建图表后,我有一个 startNode 和一个 endNode,推论/目标是:
“从最小长度为 X 和最大长度为 Y 的所有可能路径中,我想找到产生最高聚合关系值的最短路径”。
我实际上设法做的是:使用以下 cyper 查询“获取 X 和 Y 之间产生最高聚合关系值的长度路径”:
MATCH path = (startN:Batch { name: $startNode })-[:CHANGES_TO*4..7]->(endN:Batch { name: $endNode })
RETURN path,
REDUCE (s = 1, r IN RELATIONSHIPS(path) | s * r.rateValue) AS finalBatchValue
ORDER BY finalBatchValue DESC
LIMIT 1
但是,运行需要一些时间。 ¿ 有人可以提供有关如何优化这一点的想法,既要完成最短路径的目标,又要优化查询以尽可能快地运行?
我试图让它与 allShortestPaths 或 Dijkstra 等 APOC 方法一起工作,但没有成功;它最终返回了最短路径,我无法确定要考虑的最小节点数量。
非常感谢任何帮助。
【问题讨论】:
-
嘿,我对你的预期结果有点怀疑。假设 p1 的长度为 4 ,关系值为 100 。 p2 的长度为 6 ,关系值为 120 。哪个是您的预期输出,p1 还是 p2?
-
嘿,对不起,也许我没有说明哪个是流行的指标;它应该是p1。我想将最短路径作为第一个目标,所以要完全清楚,在另一个例子中,在 p1 长度为 4 和关系值 120 和 p2 长度为 4 和关系值 140 的情况下,我选择 p2。这有意义吗?谢谢!
标签: neo4j cypher py2neo neo4j-apoc