假设我们有经典的电影模型,人们可以观看电影。
(u:USER) -[:WATCHED] ->(m:Movie)
如果我想为某位用户找到观看过最相似电影的用户,我会这样做:
match (u:USER{id:"MYUSERID"})-[:WATCHED] ->(m:Movie)
with m
match (m)<-[r:WATCHED]-(o)
with m, count(r) as count, o
order by count
return o limit 10
但是,通过这样做,我想所有观看至少一个主要用户的电影的用户,这意味着在500万用户的数据库中,如果主要用户观看了MATRIX,我们将不得不遍历所有用户500万用户,聚合然后排序(假设所有人都看过它)。
我认为这种请求会非常缓慢。
是否有一种棘手的方法可以做到不同,即使改变模型也是如此?