2013-12-17 116 views
0

我正在開發一種reddit服務來學習Neo4j。 一切工作正常,我只想得到一些Cypher查詢的反饋,以獲得最新的新聞報道,作者和評論數量,喜歡和不喜歡。Neo4j/Cypher查詢語法反饋

我正在使用Neo4j 2.0。

MATCH comments = (n:news)-[:COMMENT]-(o) 
MATCH likes = (n:news)-[:LIKES]-(p) 
MATCH dislikes = (n:news)-[:DISLIKES]-(q) 
MATCH (n:news)-[:POSTED_BY]-(r) 
WITH n, r, count(comments) AS num_comments, count(likes) AS num_likes, count(dislikes) AS num_dislikes 
ORDER BY n.post_date 
LIMIT 20 
RETURN * 

opqr與標籤user所有節點。該標籤是否應該添加到查詢中以加快速度?

還有什麼你看到我可以優化嗎?

+1

那些既不喜歡也不喜歡或評論的帖子呢?他們不會出現。 –

+0

好點@MichaelHunger。 –

回答

1

我想你會想擺脫多個比賽。 Cypher會對每一個進行過濾,彼此過濾,而不是獲取所有信息。

我也會避免像評論這樣的路徑,而是要記住你正在保存的節點。當你做MATCH xyz =(a) - [:COMMENT] - (b)時,xyz是一個包含源,關係和目標節點的路徑。

MATCH (news:news)-[:COMMENT]-(comment),(news:news)-[:LIKES]-(like),(news:news)-[:DISLIKES]-(dislike),(news:news)-[:POSTED_BY]-(posted_by) 
WHERE news.post_date > 0 
WITH news, posted_by, count(comment) AS num_comments, count(like) AS num_likes, count(dislike) AS num_dislikes 
ORDER BY news.post_date 
LIMIT 20 
RETURN * 
+0

哦,非常感謝!我不知道寫''時有什麼區別,而不是新的'MATCH'語句。 我需要看看誰喜歡/不喜歡新聞報道,但我想解決方案是既節省新聞節點上的喜歡/不喜歡的數量,也建立關係。 –

+0

尼古拉斯,你可以聯繫我在納米技術點com的邁克爾? –

+0

對帖子上的信息進行彙總以防萬一這會成爲瓶頸 –

1

我會做這樣的事情。

MATCH (n:news)-[:POSTED_BY]->(r) 
WHERE n.post_date > {recent_start_time} 
RETURN n, r, 
     length((n)<-[:COMMENT]-()) AS num_comments, 
     length((n)<-[:LIKES]-()) AS num_likes, 
     length((n)<-[:DISLIKES]-()) AS num_dislikes, 
ORDER BY n.post_date DESC 
LIMIT 20 

加快步伐,並已超過您所有的帖子不是新的搜索,我可能會索引日期後場(假設它不包含時間信息)。然後發送今天,昨天等查詢,直到你有20個職位。

MATCH (n:news {post_date: {day}})-[:POSTED_BY]->(r) 
RETURN n, r, 
     length((n)<-[:COMMENT]-()) AS num_comments, 
     length((n)<-[:LIKES]-()) AS num_likes, 
     length((n)<-[:DISLIKES]-()) AS num_dislikes, 
ORDER BY n.post_date DESC 
LIMIT 20 
+0

謝謝!這將顯示沒有評論或喜歡的新聞?當你說「假設它不包含時間信息」時,你是什麼意思? 'post_date'是一個unix時間戳。 我看到我應該從我的問題中刪除'WHERE n.post_date> 0',它應該始終> 0。 –