Neo4j - 在UNION之后的WHERE,ORDER BY和LIMIT

时间:2015-05-13 21:29:55

标签: neo4j

我正在尝试执行涉及UNION的查询,但在联合后使用WHERE,ORDER BY和LIMIT进行过滤。

基本思路是找到其他用户关注的用户的所有帖子STARRED或POSTED。例如,帖子sp是您感兴趣的帖子。

MATCH (a:USER {id:0})-[:FOLLOWS]->(b:USER),
      (b)-[:STARRED]->(s:POST),
      (b)-[:POSTED]->(p:POST)

我想在过滤,排序和限制结果后返回sp的id属性的并集。要创建的任何相关索引都可以提高查询效率。

如果usp的联合,我想做类似的事情:

WHERE u.time > 1431546036148
RETURN u.id ORDER BY u.time SKIP 0 LIMIT 20

我不知道如何从us获取p,而且我不知道要创建哪些索引来提高此查询效率。

1 个答案:

答案 0 :(得分:4)

您可以使用多种关系类型,这样您就不必执行UNION。

我猜时间属性在POST节点上:

MATCH (user:USER {id:0})-[:FOLLOWS]->(friend:USER)
MATCH (friend)-[:STARRED|:POSTED]->(p:POST)
WHERE p.time > 1431546036148
RETURN p
ORDER BY p.time
LIMIT 25