我正在尝试执行涉及UNION的查询,但在联合后使用WHERE,ORDER BY和LIMIT进行过滤。
基本思路是找到其他用户关注的用户的所有帖子STARRED或POSTED。例如,帖子s
和p
是您感兴趣的帖子。
MATCH (a:USER {id:0})-[:FOLLOWS]->(b:USER),
(b)-[:STARRED]->(s:POST),
(b)-[:POSTED]->(p:POST)
我想在过滤,排序和限制结果后返回s
和p
的id属性的并集。要创建的任何相关索引都可以提高查询效率。
如果u
是s
和p
的联合,我想做类似的事情:
WHERE u.time > 1431546036148
RETURN u.id ORDER BY u.time SKIP 0 LIMIT 20
我不知道如何从u
和s
获取p
,而且我不知道要创建哪些索引来提高此查询效率。
答案 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