1

我正在尝试为我正在开发的这种社交网络类型的应用程序编写一个 Cypher 查询。想想 Facebook 类型的应用程序,您的用户可以关注其他用户,用户可以写帖子并喜欢/分享它们。

假设用户 Alice 关注了几个人(主题)。

查询应该返回三件事:

  1. Alice 的主题创建的帖子
  2. Alice的主题喜欢的帖子,喜欢的数量> = 5
  3. 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,有没有办法做到这一点?

谢谢!

4

1 回答 1

1

我认为在 Neo4j 1.9 中,您应该在这种情况下转移到服务器插件或 Java 代码,Cypher 在 2.0 之前并不真正支持这一点。

于 2013-10-11T21:47:46.947 回答