如何根据Relationship属性查找路径?

时间:2015-04-05 16:00:34

标签: neo4j

我是Neo4J的新手,3天没有,我一直想弄明白,如何在2个房间之间找到路径。

函数allShortestPaths()为我提供了这样的结果http://www.directupload.net/file/d/3948/79bvpbzd_jpg.htm 或像这样http://www.directupload.net/file/d/3948/56j6plhh_jpg.htm
抱歉,我的声誉不允许我直接包含照片)。

此功能开箱即用,但使用所有类型的关系从头到尾遍历。但是,如果我只想获得与某个属性有关系的路径呢?

路径可能如下所示:(start:Room {name: "x"})-[*]-("another node")-[*]-("other node)-[:CONNECTED_TO {state: "free}]-("another node")-[*]-(end:Room {name: "y"}

我对通路的了解是:

  • 开始节点
  • 结束节点
  • 路径中某处的关系的属性和标签

我不知道什么,不重要的是:

  • 路径将是多长时间
  • 路径上还有其他什么关系

下一步是指定我更精确寻找的路径,例如通过该路径中节点的属性。
即找到(A) to (H), where (C {type: "SC"})-[:CONNECTED_TO {state: "free"}]-(D {type: "SC"})

的路径

我已经阅读了很多正确知道的东西并尝试了一百万种不同的密码,但是我阅读的越多,我尝试的越多,我就越感到困惑。有人可以给我一个提示吗?

提前谢谢

Ichnafi

1 个答案:

答案 0 :(得分:3)

  

我对通路的了解是:

     
      
  • 开始节点
  •   
  • 结束节点
  •   
  • 路径中某处的关系的属性和标签
  •   

您要查找的是 ANY 谓词,它会测试谓词是否适用于集合中的至少一个元素。在您的情况下,集合是路径中的所有关系

一个简单的查询是:

MATCH (start:Room {name:'x'}), (end:Room {name:'y'})
MATCH p=allShortestPaths((start)-[*]-(end))
WHERE ANY(
       x IN rels(p) WHERE type(x) = 'RELATIONSHIP_TYPE' 
                    AND x.prop = propValue )
RETURN distinct(p)

文档中的更多内容:http://neo4j.com/docs/stable/query-predicates.html#functions-single