neo4j - 如果两个节点之间存在很多关系,则使用 Neo4j 中的 cypher 查找所有权重最小的路径

标签 neo4j cypher graph-databases

问题是我必须找到所有最小权重和最大深度可以为 6 的路径(5 个顶点可以在中间)。两个顶点之间可以存在多个具有不同权重的关系。

例如路径:

weight(ABEF) = 2+3+1 = 62+2+1 = 5 如果我们在节点 B 和 E 之间选择不同的关系权重。

对于其他道路也是如此 - 由于不同的关系,相同节点之间可能存在不同的权重。

数据库巨大,计算深度 6 的所有可能性非常耗时:/

如何检查两个节点之间的所有关系权重,并且在同一搜索中不检查权重最大的关系,如果存在具有相同最小权重的关系,则将它们都取走?

到目前为止我已经:

START n=node(158371), m=node(183090)
MATCH p=n-[r*..4]-m
WITH p, length(p) as len,r
RETURN  reduce(res=0, x in r: res + x.weight) as totalscore, len
ORDER BY totalscore desc;

但是如果我深度搜索 6 并找到所有可能性,数据库就会崩溃。减少函数的作用就像收集字符串,但我需要计算重量。 (2+3+1=6 而不是 2+3+1=231)

P.s.如果图形图像不可见,则位于此处:http://postimg.org/image/bf9rfdtf7/

最佳答案

听起来像是需要 Dijkstra algorithm 解决的典型问题。不幸的是,我认为不存在 Cypher 语法,但 Neo4j if you didn't mind using Java 附带了一个实现。 ,或 REST API

关于neo4j - 如果两个节点之间存在很多关系,则使用 Neo4j 中的 cypher 查找所有权重最小的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18146707/

相关文章:

neo4j - 基于事件的数据的时间图数据库

neo4j - Cypher 查询返回 A 涉及的所有关系的集合

neo4j - 一组有说服力的图表统计数据

graph-databases - 无法为状态为 [INSTALLED] 的索引调用更新操作 [REINDEX]

java - Spring Neo4j无法添加关系

Neo4j 密码查询语言 - bool 表达式的运算顺序

neo4j - 遍历所有节点并将每个节点与其他节点进行比较

java - 启动 Neo4j 失败 : Component was successfully initialized, 但未能启动

neo4j - 如何使用 Cypher 在 Neo4j 中实现 Dijkstra 算法

查询时 Neo4J OutOfMemory 错误