2013-10-11 44 views
1

我正在嘗試爲我正在處理的這種社交網絡類型的應用程序編寫一個Cypher查詢。試想一下Facebook類型的應用程序,其中有用戶關注其他用戶,用戶可以撰寫帖子並喜歡/分享。Neo4j 1.9:替代Neo4j 2.0的UNION合併結果集?

比方說,用戶愛麗絲跟隨幾個人(主題)。

查詢應該返回什麼是三件事情:

  1. 職位由Alice的主題創建
  2. 職位由Alice的科目喜歡,有一些喜歡> = 5個
  3. 的帖子共享愛麗絲的科目,以股數> = 5

我能單獨寫三個查詢:

start alice=node(35500) 
match (alice)-[:FOLLOWS]->()-[:SHARES]->(post) 
where not((post)-[:ORIGINAL]->()) 
return post; 

start alice=node(35500) 
match (alice)-[:FOLLOWS]->()-[:LIKES]->(post) 
with post, count(post) as likes 
where likes >= 5 
return post; 

start alice=node(35500) 
match (alice)-[:FOLLOWS]->()-[:SHARES]->(post)-[repost:ORIGINAL]->() 
with post, count(repost) as reposts 
where reposts >= 5 
return post; 

(一個重新發布有:ORIGINAL關係到其原來的職位),我分別做了三個查詢,合併,排序和分頁客戶端的結果

的時刻。我真正想要的是一個查詢,在那裏我可以用SKIP和LIMIT分頁結果。

據我所知,UNION不支持Neo4j 1.9,這是我使用的(穩定)版本。升級到不穩定的Neo4j 2.0並不是真正的選擇。

有沒有辦法做到這一點沒有Neo4j的聯盟?

謝謝!

回答

1

我覺得在Neo4j 1.9中,你應該轉向服務器插件或Java代碼,Cypher在2.0之前並不真正支持這一點。

+0

我明白了。如果我確實安裝了Neo4j 2.0(例如2.0.0-M06)並在neo4j.properties中設置了'cypher_parser_version = 1.9',該怎麼辦?我能否假設我的1.9 Cypher查詢將繼續按預期工作,並且只用「CYPHER 2.0」加上我的查詢 - UNION? –

+0

我決定遵循這個策略並升級到Neo4j 2.0.0-M05。 –

+0

大多數情況下,您的Cypher 1.9查詢應該繼續對2.0解析器起作用。除非由於某種不兼容性,否則我不會明確降級它們。否則,你只是選擇了一個速度較慢,效率較低的解析器,對自己沒有任何好處。 –