Neo4j 查询节点组?

Neo4j 查询节点组?,neo4j,path,cypher,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:'n

我有两组节点:

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,查找连接它们的所有路径?

即使指定开始和结束节点,查找路径也可能代价高昂。如果你要在“所有节点”之间做,那就太贵了

然而

  • 匹配p=(n)-[*]-(m)
    返回节点(p)
    按长度排序(p)描述

  • 鉴于您在下面的评论,这可能会有所帮助:

    匹配p=(n)-[*]-(m)
    其中所有(x在节点(p)| x.id在[,…,]中)
    和m.id n.id
    返回节点(p)
    按长度排序(p)描述

  • MATCH p=(n{id:})-[*]-(m{id:})
    返回p


  • 但是这些查询非常非常昂贵,如果你真的使用它们,你会想限制返回结果的数量和节点/关系的最大深度。

    你能澄清一下吗?我能看到的两个“组”之间唯一的真正区别是开始和结束之间的节点数量。例如,n1 rel->n2 rel->n3可被视为第二组的一部分,不是吗?所有节点之间的“rel”类型都是相同的,并且节点没有使用标签。没有什么可以真正唯一地识别这两个“群体”。或者我遗漏了什么?这只是一个例子。在实际情况中,组可能会非常不同。尽管如此,问题仍然悬而未决。另外,查询1和查询2之间的区别是什么?分别是降序还是升序?路径长度和组中的节点数不是一回事。例如,一个组可能由10个节点组成,所有节点都连接到一个根,其中所有节点的路径长度为1。Ok。你的问题不清楚。因此,听起来您在谈论针对任意图(即任何图)的查询。是这样吗?谢谢!为了回答2)我将重新表述这个问题:如何在给定的节点组中找到最长的路径?例如,一个组:n1->n2->n3->n4->n5->n6,n1->n7->n8最长路径是n1->..->n6另一个较短路径n1->…->n8。那么?最新答案。不过,您肯定应该测试它,因为我不是100%了解它。在Neo4j Web服务器控制台中测试后:1)不返回最长的过程,但只有两个节点之间的部分过程2)不起作用,因为我不了解,…,在这种情况下3)起作用,但也返回两个节点之间的所有部分过程1。此查询将根据您告诉我的内容执行您希望它执行的操作。再一次,考虑到你想要的东西过于模糊/笼统的描述,这并不是很多。该查询将按降序排列两个任意节点之间的所有路径。2.我怎么知道呢?考虑到您创建节点的方式,我不得不做出一个假设。删除“ALL”子句并保留m.id n.id位,或使用id(m)id(n)3。再说一遍,你说的是所有的路。