neo4j:受节点和 rel 属性约束的最短路径
neo4j: shortest paths constrained by node and rel properties
来自教程:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name="Keanu Reeves" and kevin.name = "Kevin Bacon"
RETURN length(p)
假设每个 Person 节点都有年龄 属性 和职业。每个 KNOWS 边都有一个 length of acquaintance
属性。
什么 Cypher 查询会 return 最短路径,例如
age > 40 years
not (occupation = ACTOR)
lengthOfAcquaintance > 10 years
在分子生物学相互作用数据中,我们希望进行更复杂的查询 - 可能是 cypher 处理得很好的那种,但我不知道如何处理。例如:
找到受体分子A和转录因子B之间的最短路径,其中大部分边缘来自小规模实验,大多数基因被注释为激酶,边缘的证据(权重)为greater than 0.5
这些查询可能会出现在很多设置中。任何人都可以指出阅读材料和示例以帮助我理解这是如何完成的吗?并可能提供 "Bacon Number" 查询的适度扩展,以容纳一个节点和一条边 属性?
谢谢!
- 保罗
我认为您正在寻找的是 ALL predicate。
这里有几个使用它的例子:
ShortestPath,其中路径中的所有参与者都应具有 age > 40
:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x IN nodes(p) WHERE x.age > 40)
RETURN p
最短路径,其中所有边都应具有 lengthOfAcquaintance > 10
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x in rels(p) WHERE x.lengthOfAcquaintance > 100
RETURN p
当然你可以把两者结合起来:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x in rels(p) WHERE x.lengthOfAcquaintance > 10)
AND ALL(x in nodes(p) WHERE x.age > 40)
RETURN p
来自教程:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name="Keanu Reeves" and kevin.name = "Kevin Bacon"
RETURN length(p)
假设每个 Person 节点都有年龄 属性 和职业。每个 KNOWS 边都有一个 length of acquaintance
属性。
什么 Cypher 查询会 return 最短路径,例如
age > 40 years
not (occupation = ACTOR)
lengthOfAcquaintance > 10 years
在分子生物学相互作用数据中,我们希望进行更复杂的查询 - 可能是 cypher 处理得很好的那种,但我不知道如何处理。例如:
找到受体分子A和转录因子B之间的最短路径,其中大部分边缘来自小规模实验,大多数基因被注释为激酶,边缘的证据(权重)为greater than 0.5
这些查询可能会出现在很多设置中。任何人都可以指出阅读材料和示例以帮助我理解这是如何完成的吗?并可能提供 "Bacon Number" 查询的适度扩展,以容纳一个节点和一条边 属性?
谢谢!
- 保罗
我认为您正在寻找的是 ALL predicate。
这里有几个使用它的例子:
ShortestPath,其中路径中的所有参与者都应具有 age > 40
:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x IN nodes(p) WHERE x.age > 40)
RETURN p
最短路径,其中所有边都应具有 lengthOfAcquaintance > 10
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x in rels(p) WHERE x.lengthOfAcquaintance > 100
RETURN p
当然你可以把两者结合起来:
MATCH p=shortestPath( (keanu:Person)-[:KNOWS*]-(kevin:Person) )
WHERE keanu.name = "Keanu Reeves"
AND kevin.name = "Kevin Bacon"
AND ALL(x in rels(p) WHERE x.lengthOfAcquaintance > 10)
AND ALL(x in nodes(p) WHERE x.age > 40)
RETURN p