我有关于电影的数据,可以是喜剧,也可以是电视剧。我在这些电影中有演员,他们可以在每部电影中扮演多个角色。我想要找到所有不同的电影和演员的场景:
(剧集1:电影类型{ {Genre:'Drama'})-role1-(actor1:Actor)-role2-(comedy:Movie {Genre:'Comedy'})-role3-(actor2:Actor)-role4-(drama2:Movie:‘话剧’})
也就是说,我想找出两部(不同)电视剧通过一部喜剧联系在一起的地方,这两部电视剧至少有一个演员。我正在努力有效地做到这一点,并让neo4j为我提供不同的drama1,drama2,actor1,actor2,comedy组。我的数据有几百万个节点和数千万个关系,所以效率很重要。可以插入neo4j在线控制台的玩具设置是:
(j)-:ActedIn->(b),(j)-:ActedIn->(c),(k)-:ActedIn->(d),(l)-:ActedIn->(c),(i)-:ActedIn->(a),(i)-:ActedIn->(h),(m)-:ActedIn->(h)
我主要尝试了各种不同的
匹配(戏剧1:电影类型{ {Genre:'Drama'})-role1-(actor1:Actor)-role2-(comedy:Movie {Genre:'Comedy'})-role3-(actor2:Actor)-role4-(drama2:Movie:‘戏剧’})返回drama1,actor1,actor1,actor2,drama2
发布于 2021-05-07 00:27:35
您可以像这样使用多匹配查询:
MATCH p = (drama1:Movie {Genre:'Drama'})-[r1]-(a1)-[r2]-(comedy:Movie {Genre:'Comedy'})-[r3]-(a2)-[r4]-(drama2:Movie {Genre:'Drama'})
MATCH (drama1)-[]-(a:Actor)-[]-(drama2)
WHERE drama1<>drama2
RETURN nodes(p)查询说明:
第一个匹配查找由喜剧连接的2个戏剧
不需要做太多的工作来优化查询,因为您没有按任何属性进行过滤,所以您将遍历整个图。您可以尝试在'Genre‘属性上创建索引,但如果您只有两个不同的值,则不建议这样做。
MATCH p = (drama1:Movie {Genre:'Drama'})-[r1]-(a1)-[r2]-(comedy:Movie {Genre:'Comedy'})-[r3]-(a2)-[r4]-(drama2:Movie {Genre:'Drama'})
MATCH (drama1)-[]-(a:Actor)-[]-(drama2)
WHERE drama1<>drama2
RETURN nodes(p) SKIP 0 LIMIT 100000此查询获取前100k个模式,然后您必须递增跳过以获得下一个100k (跳过100000限制100000)。
https://stackoverflow.com/questions/67421668
复制相似问题