在neo4j中查询具有一组指定关系的所有路径

时间:2014-09-19 20:36:27

标签: neo4j cypher

我正在尝试查询图形以返回具有一组指定关系的所有路径。

我的图表包含以下节点:人员

连接两个人的关系是:知道,已婚

所以一些数据的例子是:

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

在我的查询中,我希望能够找到包含“已知”和“已婚”关系的所有路径;但是,我并不关心路径中这种关系的排序。例如,我的查询应返回以下路径:

1)a:人 - [:已婚] - > c:人 - [:know] - > b:人员
 2)d:人 - [:知道] - > a:人 - [:已婚] - > c:人

我尝试了以下查询

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

然而,它返回的路径只有知道关系或路径只有结婚关系,但不是两者。

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

2 个答案:

答案 0 :(得分:0)

你可以试试这个

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

它将为您提供所有路径

答案 1 :(得分: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