简体   繁体   English

密码路径查询(使用Neo4j)

[英]Cypher path querying (using Neo4j)

I have a graph datebase so that there is in it some pattern like this one: 我有一个图数据库,所以其中有一些像这样的模式:

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

And I want to have all graph with this pattern 我希望所有图形都具有这种模式

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

Is it possible? 可能吗? I've search a little but I haven't found how to do it. 我已经搜索了一下,但还没有找到方法。 I know we can use "|" 我知道我们可以使用“ |” for a type like this 对于这样的类型

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

but there is no "&" and the path assigning only works on pattern which are written without ",". 但没有“&”,并且分配路径仅适用于不带“,”的模式。

Thanks 谢谢

EDIT: If it could help, here is another example of what I'm seeking: In a database with movies, person and relations like ACTED_IN, KNOWS, FRIEND and HATE I want all the graphs containing an actor "Actor1" (who ACTED_IN a movie "M") who KNOWS "Person1", FRIEND "Person2" and HATE "Person3" which ACTED_IN the same movie "M". 编辑:如果有帮助,这是我正在寻找的另一个示例:在包含电影,人物和诸如ACTED_IN,KNOWS,FRIEND和HATE之类的人的数据库中,我希望所有包含actor“ Actor1”(ACTED_IN是电影“ M”),谁知道ACTED_IN同一电影“ M”的“ Person1”,朋友“ Person2”和HATE“ Person3”。

An UNION like the one in the answer of "Michael Hunger" does not work because we have multiple subgraphs and not graphs. 像“迈克尔·汉格”(Michael Hunger)回答中的那样的UNION无效,因为我们有多个子图而不是图。 Moreover, some subgraph might not be correct answers for the bigger pattern. 此外,某些子图可能不是较大模式的正确答案。

Your query will be very inefficient, as you don't restrict your search to a set of start nodes neither with labels or label+property combinations !!!! 您的查询将非常低效,因为您不会将搜索范围限制为既没有标签也没有标签或标签+属性组合的开始节点!

You can use UNION for that: 您可以为此使用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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM