2011-08-05 27 views
7

Tôi rất mới đối với neo4j và đồ thị cơ sở dữ liệu nói chung. Tôi prototyping một ứng dụng, và tôi không biết làm thế nào tôi nên viết các truy vấn nàyLàm thế nào tôi có thể viết các truy vấn này trong neo4j?

Tôi đã miền này:

tài Restaurant xét TypeOfFood

Vì vậy, một Restarurant có một hoặc nhiều TypeOfFood, Người dùng để lại đánh giá về nhà hàng. Người dùng có một số loại thực phẩm ưa thích, phù hợp với nhà hàng bán TypeOfFood. Người dùng cũng có liên quan với nhau với mối quan hệ bạn bè thường.

Một số truy vấn Tôi đang cố gắng để viết:

  • Hãy cho tôi tất cả những nhà hàng mà bạn bè của tôi đã đánh với 3 hoặc nhiều hơn sao mà làm cho các loại thực phẩm tôi thích (loại trừ những nhà hàng tôi đã xem xét)

  • Đề nghị cho tôi bạn bè tôi có thể biết (tôi đoán điều này nên được một cái gì đó giống như "tất cả những người bạn mà là bạn của bạn bè của tôi, nhưng không được nêu ra tôi, trật tự bởi một cái gì đó)

Trả lời

13

Sử dụng ngôn ngữ Cypher truy vấn Neo4j của bạn có thể viết các truy vấn của bạn như thế này:

Lựa chọn top 20 nhà hàng đánh giá tốt nhất, được sắp xếp theo các ngôi sao và số lượng ý kiến ​​

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 

người bạn của một người bạn

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

Bạn có thể thực hiện các truy vấn cypher này trong số liệu Neo4j Webadmin Console trên tập dữ liệu của mình, mà còn trong neo4j-shell, từ xa qua Cypher-Rest-Plugin qua Spring Data Graph.

Ngoài ra còn có một số screencast thảo luận các truy vấn tương tự trong cypher.

Bạn cũng có thể sử dụng Gremlin, Neo4j-Traversers hoặc chuyển ngang thủ công qua getRelationships nếu muốn.

+1

Cảm ơn Michael. Tôi đã đi đến hồ sơ SO của bạn để tìm một cách để liên lạc với bạn, mong đợi một coder bình thường, nhưng bạn là một ngôi sao nhạc rock :) Bạn có tư vấn không? hoặc có thể bạn có thể liên lạc với ai đó? – NicoGranelli

+1

Cảm ơn lời khen ngợi. Bạn có thể liên hệ với tôi bằng cách đăng ký vào danh sách gửi thư Neo4j. Hiện tại Neo Technology cũng đang tư vấn. –

+0

Xin chào @MichaelHunger, tôi đã đăng một truy vấn (http://stackoverflow.com/questions/17721173/neo4j-user-suggestion-with-mutual-count/17831172?noredirect=1#comment26066269_17831172), bạn có thể giúp tôi không điều này? và Làm cách nào để đăng ký bạn trong danh sách gửi thư. Tôi muốn biết về tư vấn của bạn và đó là chi phí. Cảm ơn –

Các vấn đề liên quan