Neo4j -- UNION 之后的 WHERE、ORDER BY 和 LIMIT

Neo4j -- WHERE, ORDER BY, and LIMIT after UNION

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

基本思路是查找其他用户关注的用户加星标或发布的所有帖子。例如,帖子 sp 是感兴趣的帖子。

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

我想在过滤、排序和限制结果后,return sp 的 id 属性 的并集。要创建的任何使此查询高效的相关索引也会有所帮助。

如果 usp 的联合,我想做这样的事情:

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

我不知道如何从 sp 得到 u,我也不知道要创建什么索引才能使这个查询高效。

您可以使用多种关系类型,这样就不必执行 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