2011-08-05 81 views
7

我對neo4j非常陌生,一般來說也是圖形數據庫。我的原型應用程序,我不知道我應該怎麼寫這些查詢我怎麼能在neo4j中寫這個查詢?

我有這個域名:

用戶 餐廳 評論 TypeOfFood

所以一個Restarurant有一個或許多TypeOfFood,用戶留下關於餐館的評論。用戶有一些首選的食物,與TypeOfFood餐廳出售相匹配。此外,用戶通常與朋友關係相互關聯。

一些我想要寫的查詢:

  • 給我所有的朋友都額定電壓與3個以上的恆星,讓我喜歡的一種食物(排除那些餐館的餐廳,我已經審查)

  • 推薦我的朋友我可以知道(我想這應該是像「所有的都是我的朋友的朋友朋友,但沒有還我的,爲了用的東西)

回答

13

使用的Neo4j的Cypher查詢語言,你可以寫你的查詢是這樣的:

選擇排名前20位最受好評的餐廳,排序由恆星和評論的數量朋友的

start user=(users,name,'Nico') 
match user-[:FRIEND]->friend-[r,:RATED]->restaurant-[:SERVES]->food, 
     user-[:LIKES]->food,user-[:RATED]->rated_by_me 
where r.stars > 3 
return restaurant.name, avg(r.stars), count(*) 
order by avg(r.stars) desc, count(*) desc 
limit 20 

朋友

start user=(users,name,'Nico') 
match user-[:FRIEND]->friend->[:FRIEND]->foaf 
return foaf, foaf.name 

您可以通過Spring Data Graph通過Cypher-Rest-Plugin在數據集中執行Neo4j Webadmin Console中的這些密碼查詢,但也可以在neo4j-shell中執行這些密碼查詢。

還有一個screencast在cypher中討論類似的查詢。

如果您願意,您也可以使用GremlinNeo4j-Traversers或通過getRelationships手動遍歷。

+1

謝謝邁克爾。我去你的SO配置文件找到一種方式來聯繫你,期待一個正常的編碼器,但你是一個搖滾明星:) 你做諮詢嗎?或者你可以讓我和某人聯繫? – NicoGranelli

+1

感謝您的好評。您可以通過訂閱Neo4j郵件列表與我聯繫。我們Neo Technology也在做諮詢。 –

+0

嗨@MichaelHunger,我發佈了一個查詢(http://stackoverflow.com/questions/17721173/neo4j-user-suggestion-with-mutual-count/17831172?noredirect=1#comment26066269_17831172),你能幫我一個忙嗎?這個?以及我如何在郵件列表中訂閱你。我想知道你的諮詢和收費。謝謝 –