Neo4j 1.9:替代Neo4j 2.0的UNION来结合结果集?

时间:2013-10-11 07:16:20

标签: neo4j union cypher neo4jclient

我正在尝试为我正在处理的这种社交网络类型的应用程序编写Cypher查询。想想Facebook类型的应用程序,其中有用户跟随其他用户,用户可以撰写帖子并喜欢/分享它们。

让我们说用户Alice跟随几个人(主题)。

查询应返回的内容有三个:

  1. 由Alice的主题创建的帖子
  2. Alice的主题喜欢的帖子,有许多喜欢> = 5
  3. Alice的主题分享的帖子,其中包含多个> = 5
  4. 的份额

    我可以分别编写三个查询:

    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;
    

    (转发有一个原始帖子的原始关系)

    目前我正在分别进行三个查询,在客户端中对结果进行组合,排序和分页。我真正想要的是单个查询,我可以使用SKIP和LIMIT来分页结果。

    据我所知,Neo4j 1.9不支持UNION,这是我正在使用的(稳定版)版本。升级到不稳定的Neo4j 2.0并不是一个真正的选择。

    如果没有Neo4j的UNION,有没有办法做到这一点?

    谢谢!

1 个答案:

答案 0 :(得分:1)

我认为在Neo4j 1.9中,你应该转移到服务器插件或Java代码,Cypher在2.0之前并不支持这个。