我想获得通过Neo4J Cypher查询连接到单个父级的最长路径。
我目前的查询是这样的:
MATCH p =(N1:Node) - [REL * .. 2] - >(N2:Node)WHERE N2.RIC =〜"某些自动收报机。*"返回p限制50
但是,我得到的结果是这样的
A-> B->父 B->父
在我看来,我只想保留最长的路径。 另外,无论如何都要返回查询的方向? IE:我可以在查询的输出中看到关系的自/关。
提前感谢!
答案 0 :(得分:1)
如果您只想要最长的路径,那么您可以这样做:
MATCH path=(N1:Node)-[REL*..2]->(N2:Node)
WHERE N2.RIC =~"some ticker.*"
RETURN p
ORDER BY length(p) DESC
LIMIT 1
至于获取路线,这取决于您使用的驱动程序。在Neo4j HTTP事务端点中,如果为REST
指定resultDataContents
,它将为您返回的任何路径对象返回directions
。以下是您设置的方式:
以下是一个示例:
"rest": [
{
"relationships": [
"http://localhost:7474/db/data/relationship/587"
],
"nodes": [
"http://localhost:7474/db/data/node/1002",
"http://localhost:7474/db/data/node/1001"
],
"directions": [
"<-"
],
"length": 1,
"start": "http://localhost:7474/db/data/node/1002",
"end": "http://localhost:7474/db/data/node/1001"
}
]
修改强>
回复您的评论,以获得每位家长的最长路径:
MATCH path=(N1:Node)-[REL*..2]->(N2:Node)
WHERE N2.RIC =~"some ticker.*"
WITH N1, N2, collect(p) AS paths
ORDER BY length(p) DESC
RETURN N1, N2, paths[0] AS longest_path
我不确定哪一方应该是父母,所以我同时返回了N1
和N2
,它们应该为这两者的每个组合提供最长的路径。您可以删除任何一个以获得通向/离开节点的最长路径。