2014-09-19 65 views
2

我想查询的图形与一组指定的关系返回所有的路径与一组特定关系的所有路径。查询在Neo4j的

图表我有包含以下节点:人

其连接两个人的关系是:人都知道,结婚

因此,一些数据的一个例子是:

c:Person-[:knows]->b:Person 
    a:Person-[:married]->c:Person 
    d:Person-[knows]-> a:Person 

在我查询我希望能够找到包含'知道'和'已婚'两种关系的所有路径;然而,我不关心路径中这种关系的顺序。例如,我的查询应该返回以下路径:

1)a:人 - [:已婚] - > c:人 - [:知道] - > b:人
2)d:人 - [:知道] - >一个:人 - [:结婚] - > C:人

我尝试以下查询

MATCH p=(a)-[:KNOWS|MARRIED*1..3]-(b) 
    RETURN p 

然而,返回的路径仅具有知道关系或路径仅具有已婚关系,但不是两者。

有没有找到我想要的路径的方法吗?非常感谢!

回答

0

你可以试试这个

MATCH p=(a)-[rel*]-(b) 
WHERE type(rel)='KNOWS' OR type(rel)='MARRIED' 
RETURN p 

它会为您提供所有的路径

+0

非常感谢你的回答。我试着查询,并抛出一个错误:r没有定义(第2行,第7列)。 – sgao 2014-09-21 21:08:27

+0

@sgao编辑的查询。 – 2014-09-22 05:00:55

+0

再次感谢您的更新答案。我试过了,它仍然抛出了相同的错误:rel没有定义。然而,我发现下面的查询可以工作: 匹配(一) - [R *] - (B) 其中 滤波器(X IN r其中式(X)= '知道') AND 滤波器(Y IN r类型(y)='MARRIED') return r – sgao 2014-09-22 14:59:22

0
MATCH p = (a:Person)-[rels:KNOWS|MARRIED*]->(b:Person) 
WITH p, EXTRACT(r IN rels | TYPE(r)) AS types 
WHERE 'KNOWS' IN types AND 'MARRIED' IN types 
RETURN p 
+0

谢谢Nicole。我试过查询,没有行被返回。 – sgao 2014-09-24 00:35:59

+0

那么猜测那个模式不存在。 :P – 2014-09-24 21:48:20