neo4j - 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
解决方案
如果您的意思是希望每个关系都具有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
推荐阅读
- bash - 将读取的光标返回到文件的开头
- c# - 有没有办法查看 DynamicMethod 生成的 x86 汇编代码?
- arrays - 使用数组中的两个文本字段填充组合框
- javascript - API puller 中的代码块,我不知道发生了什么
- python - Sqlalchemy:将 pandas 数据框中的新行添加到 mysql 表中,如果它们不存在于表中
- java - 调试 Java Swing App 导致计算机死机
- java - 无法调用 AOP 是建议
- angular - 嵌套组件中的 ScrollView 不滚动
- json - 如何使用 GraphQL 从 VueJS/Gridsome 中的 JSON 文件中迭代数据?
- excel - 编译错误,未定义子或函数