首页 > 解决方案 > Neo4j中如何找到具有多个节点和多个关系的最短路径

问题描述

我不是 Cypher 方面的专家,但我在一个项目中,我有几个具有以下属性的节点:

['COGAB11', 'COGAB7', 'COGAB30', 'COGAB32', 'COGAB94', 'COGAB70',
'COGAB01', 'COGAB04', 'COGAB91', 'COG1AB77', 'COGAB46', 'COGAB40',
'COGAB31', 'COGAB14']

它们之间有几种关系:

[rel:coexpression|cooccurence|database|experimental|
fusion|neighborhood|score|textmining]

它也有一个属性,比如score它是一个 0-1000 的整数值,我想找到所有这些节点之间的最短路径,并获得它们之间得分大于等于 500 的关系。因此,我想返回带有这些关系和路径的图表。但是,我只找到了最短路径的查询,但在两个节点之间而不是在多个节点和多个关系之间。此外,我不确定是否应该为此使用 APOC。

MATCH (start:Loc{name:'A'}), (end:Loc{name:'F'})
CALL algo.shortestPath.stream(start, end, 'cost')
YIELD nodeId, cost
RETURN algo.asNode(nodeId).name AS name, cost

标签: neo4jpathcypher

解决方案


如果您的意思是希望每个关系都具有score>= 500,那么这应该返回最短路径:

MATCH (start:Loc {name: 'A'}), (end:Loc {name: 'F'}),
  p = SHORTESTPATH((start)-[:coexpression|cooccurence|database|experimental|fusion|neighborhood|score|textmining]-(end))
WHERE ALL(r IN RELATIONSHIPS(p) WHERE r.score >= 500)
RETURN p

推荐阅读