Cypher路径查询(使用Neo4j)

时间:2015-04-13 10:37:35

标签: neo4j pattern-matching cypher

我有一个图表数据库,因此其中有一些像这样的模式:

(n1)-[:a]->(n2),
(n1)-[:b]->(n2),
(n1)-[:c]->(n2),
(n1)-[:e]->(n2),
(n1)-[:d]->(n3),
(n2)-[:b]->(n4)

我想拥有这种模式的所有图表

MATCH p={
 (n3)<-[:d]-(n1)-[:a]->(n2)-[:b]->(n4),
 (n1)-[:b]->(n2)<-[:c]-(n1),
 (n1)-[:e]->(n2)
}
RETURN p

有可能吗?我搜索了一下,但我还没找到怎么做。 我知道我们可以使用“|”对于像这样的类型

 ()-[:a|b]->()

但没有“&amp;”并且路径分配仅适用于没有“,”的模式。

由于

编辑: 如果它可以帮助,这是我正在寻求的另一个例子: 在包含电影,人物和关系的数据库中,如ACTED_IN,KNOWS,FRIEND和HATE 我想要所有包含演员“Actor1”(谁是ACTED_IN电影“M”)的图表谁知道“Person1”,FRIEND“Person2”和HATE“Person3”哪个ACTED_IN同一部电影“M”。

像“迈克尔·亨格尔”的回答中的UNION不起作用,因为我们有多个子图而不是图。此外,某些子图可能不是更大模式的正确答案。

1 个答案:

答案 0 :(得分:1)

您的查询将非常效率低下,因为您不会将搜索限制为一组既没有标签或标签+属性组合的起始节点!!!!

您可以使用UNION:

MATCH p=(n3)<-[:d]-(n1)-[:a]->(n2)-[:b]->(n4) RETURN p
UNION
MATCH p=(n1)-[:b]->(n2)<-[:c]-(n1) RETURN p
UNION
MATCH p=(n1)-[:e]->(n2) RETURN p