我正在尝试为我正在开发的这种社交网络类型的应用程序编写一个 Cypher 查询。想想 Facebook 类型的应用程序,您的用户可以关注其他用户,用户可以写帖子并喜欢/分享它们。
假设用户 Alice 关注了几个人(主题)。
查询应该返回三件事:
- Alice 的主题创建的帖子
- Alice的主题喜欢的帖子,喜欢的数量> = 5
- Alice 的主题分享的帖子,分享数 >= 5
我可以分别编写三个查询:
start alice=node(35500)
match (alice)-[:FOLLOWS]->()-[:SHARES]->(post)
where not((post)-[:ORIGINAL]->())
return post;
start alice=node(35500)
match (alice)-[:FOLLOWS]->()-[:LIKES]->(post)
with post, count(post) as likes
where likes >= 5
return post;
start alice=node(35500)
match (alice)-[:FOLLOWS]->()-[:SHARES]->(post)-[repost:ORIGINAL]->()
with post, count(repost) as reposts
where reposts >= 5
return post;
(转贴与其原始帖子有 :ORIGINAL 关系)
目前我正在分别进行三个查询,在客户端中对结果进行组合、排序和分页。我真正想要的是一个查询,我可以在其中使用 SKIP 和 LIMIT 对结果进行分页。
据我所知,Neo4j 1.9 不支持 UNION,这是我正在使用的(稳定)版本。升级到不稳定的 Neo4j 2.0 并不是一个真正的选择。
如果没有 Neo4j 的 UNION,有没有办法做到这一点?
谢谢!