我正在创建一个社交媒体应用程序,其后端是Neo4j。在这里,我想获取用户主页上的朋友活动。我设置了每个卷轴10个活动的限制。这是我当前的Neo4j查询:
MATCH (m:Person { id: '$id'})-[:FOLLOWS*1..1]->(f:Person)-[:HAS_ACTIVITY]->(la:Activity)-[:NEXT*0..]->(act:Activity)
WHERE act.verb IN ['post' ,'post_media_item' ,'watch_activity']
RETURN f, act ORDER BY act.published DESC LIMIT 10在上面的查询中,用户由Person节点描述,而用户提要由Activity节点描述。"m“是当前用户,其好友"f”由关系"Follows“描述。每个用户的活动与关系"NEXT“相互链接,并与具有关系"HAS_ACTIVITY”的Person节点链接。有意将最大跳数保留为空,因为一个人可以有任意数量的活动。
对于这个查询,当一个人的朋友列表增加时,整个查询的执行时间也会增加。目前,对于一个有50个朋友的用户来说,所花的时间是3-5秒。我必须从这个查询的结果执行进一步的聚合,这需要7-10秒的查询执行时间。
请找到附件中的个人资料截图并解释:


我如何优化我的Cypher查询,使我得到最快的结果,而不管有多少朋友?
使用的Neo4j版本: 3.0.6
发布于 2021-01-08 23:00:09
一件简单的事情就是至少更新到Neo4j 3.5.x。
如果一个人的所有活动都与HAS_ACTIVITY关系相关联,为什么还需要进一步遍历下一个关系呢?下面的查询还不够吗?
MATCH (m:Person { id: '58c1370350b91a0005be0136'})-[:FOLLOWS*1..1]->(f:Person)-[:HAS_ACTIVITY]->(la:Activity)
WHERE la.verb IN ['post' ,'post_media_item' ,'watch_activity']
RETURN f, la ORDER BY la.published DESC LIMIT 10https://stackoverflow.com/questions/65630723
复制相似问题