查询节点组?

时间:2014-05-19 15:54:09

标签: neo4j path cypher

我有两组节点:

1) n1 -rel-> n2 -rel-> n3 -rel-> n4
2) n5 -rel-> n6 -rel-> n7

使用命令创建:

1) CREATE (n1 { id:'n1' })-[:rel]->(n2 {id:'n2' })-[:rel]->(n3 { id:'n3' })-[:rel]->(n4 {id:'n4'})
2) CREATE (n5 { id:'n5' })-[:rel]->(n6 {id:'n6' })-[:rel]->(n7 { id:'n7' })

什么是查询:

1)查找按组中存在的最长路径排序的节点组?

2)查找按组包含的节点数排序的节点组?

3)如果任何两个节点id找到连接它们的所有路径?

1 个答案:

答案 0 :(得分:0)

即使指定开始和结束节点,寻路也可能是代价高昂的。如果您要在"所有节点"之间进行此操作,那就非常昂贵。

...然而

  1. MATCH p = (n)-[*]-(m) RETURN nodes(p) ORDER BY length(p) DESC

  2. 鉴于您的评论如下,这可能有所帮助:

    MATCH p = (n)-[*]-(m) WHERE ALL(x IN nodes(p) | x.id IN [<id1>, ..., <id_x>]) AND m.id <> n.id RETURN nodes(p) ORDER BY length(p) DESC

  3. MATCH p = (n {id: <id1>})-[*]-(m {id: <id2>}) RETURN p

  4. 但这些是可怕的,非常昂贵的查询,实际上,如果你使用它们,你会想要对返回的结果数量和节点/关系的最大深度施加限制。