首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cypher:基于几个ASCII片段的子图匹配的最佳方法是什么?

Cypher:基于几个ASCII片段的子图匹配的最佳方法是什么?
EN

Stack Overflow用户
提问于 2019-12-10 15:53:20
回答 1查看 32关注 0票数 1

我正在学习Cypher/Neo4j,并在玩电影图形数据集。我想了解如何编写匹配更复杂的子图并返回整个子图的语句。

例如,如果我想要拍摄和导演同一部电影的人的子图,我可以使用:

代码语言:javascript
复制
MATCH (m:Movie) <-[:DIRECTED]-(p:Person) -[:ACTED_IN]-> (m:Movie)
RETURN *

然而,这仅仅是因为我要寻找的子图是一条直线。如果我想把上面的内容扩展到匹配A:导演一部电影和B:在一部电影中扮演的人的子图--“电影X",我就不知道该怎么做了。我知道我可以使用WHERE语句过滤出参与者没有在"Movie“中操作的子图,但是这不会返回表示"Movie”的节点。

我想知道是否有一种方法可以构造这样的查询--如下所示:

代码语言:javascript
复制
MATCH (p:Person) -[:ACTED_IN]-> (m:Movie) AND
(p:Person) -[:DIRECTED]-> (m:Movie) AND
(p:Person)-[:ACTED_IN]->(:Movie {title: 'Movie X'})
RETURN *
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-10 16:01:50

你绝对走在正确的道路上。试试看

代码语言:javascript
复制
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE (p)-[:DIRECTED]->(m)
AND (p)-[:ACTED_IN]->(:Movie {title: 'Movie X'})
RETURN *

在这种情况下,由于您已经知道您想要的人在电影X,一个更好的方法,在这个特定的情况下,将匹配‘电影X’的权利,如.

代码语言:javascript
复制
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: 'Movie X'})
WHERE (p)-[:DIRECTED]->(m)
RETURN *

为了返回‘movies’(虽然它应该是已经匹配的电影之一),您需要在MATCH语句中识别它。YOu可以做这样的事..。

代码语言:javascript
复制
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE (p)-[:DIRECTED]->(m)
WITH p, m
MATCH (p)-[:ACTED_IN]->(m2:Movie {title: 'Movie X'})
RETURN p, m, m2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59271038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档