删除作为较长路径的子集的路径

时间:2015-10-27 01:49:56

标签: graph neo4j

我想获得通过Neo4J Cypher查询连接到单个父级的最长路径。

我目前的查询是这样的:

MATCH p =(N1:Node) - [REL * .. 2] - >(N2:Node)WHERE N2.RIC =〜"某些自动收报机。*"返回p限制50

但是,我得到的结果是这样的

A-> B->父 B->父

在我看来,我只想保留最长的路径。 另外,无论如何都要返回查询的方向? IE:我可以在查询的输出中看到关系的自/关。

提前感谢!

1 个答案:

答案 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。以下是您设置的方式:

http://neo4j.com/docs/stable/rest-api-transactional.html#rest-api-execute-statements-in-an-open-transaction-in-rest-format-for-the-return

以下是一个示例:

      "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

我不确定哪一方应该是父母,所以我同时返回了N1N2,它们应该为这两者的每个组合提供最长的路径。您可以删除任何一个以获得通向/离开节点的最长路径。