2015-04-05 40 views
2

我是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"})

的路径我读了很多的东西知道对不对,上前一百万个不同cyphers,但我阅读,我尝试的越多,我越感到困惑就越多。任何人都可以给我一个提示吗?

预先感谢您

Ichnafi

回答

3

我所知道的关于希望的路径是:

  • 开始节点
  • 端节点
  • 财产和地方关系的标签在路径内

你在找什么是任何谓词,它测试谓词是否适用于集合中的至少一个元素。在你的情况下,集合是路径中的所有关系

一个简单的查询是:

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

+0

太谢谢你了。不仅如此,密码工作像一个魅力,我也认为我已经理解了它。 – Ichnafi 2015-04-06 11:26:14