Neo4j,Cypher:获取新闻源(Graphiti)

时间:2014-11-03 18:22:18

标签: neo4j cypher

如何获取用户的新闻Feed?

获取ID = 4084079

的用户的新闻Feed
MATCH (u:User) 
WHERE ID(u)=4084079  
OPTIONAL MATCH p=(u)-[r:Ego*..]->(friend:User) 
WHERE all(r2 in relationships(p) 
    WHERE r2.user_id=4084079) 
WITH friend MATCH (friend)-[:FeedNext*]->(feed) 
RETURN labels(feed), feed, feed.timestamp 
ORDER BY toInt(feed.timestamp) DESC 
SKIP 1 
LIMIT 10 

此行尝试匹配变为无穷大的最长路径,因此查询挂起。 WHERE AND OPTIONAL MATCH子句将单独执行。

OPTIONAL MATCH p=(u)-[r:Ego*..]->(friend:User) 

如何避免所有r匹配user_id

以这种方式编写查询会返回语法错误。

OPTIONAL MATCH p=(u)-[r:Ego{user_id:4084079}*..]->(friend:User)

1 个答案:

答案 0 :(得分:0)

这应该有效:

OPTIONAL MATCH p=(u)-[r:Ego*.. {user_id:4084079}]->(friend:User)

你也可以离开..

OPTIONAL MATCH p=(u)-[r:Ego* {user_id:4084079}]->(friend:User)

但我可能会将其限制为最大路径长度。

此外,Cypher可能还不是最快的解决方案,它将随新的查询规划器而变化(尝试在查询前添加cypher 2.1.experimental进行测试)。

否则你可能想要查看像这样的服务器扩展:

https://github.com/jexp/neo4j-activity-stream