我对neo4j和图表数据库都很新。我正在为一个应用程序进行原型设计,我不知道该如何编写这些查询
我有这个域名:
用户 餐厅 评论 TypeOfFood
因此,Restarurant有一个或多个TypeOfFood,用户会留下关于餐馆的评论。用户有一些首选的食物,与餐馆出售的TypeOfFood相匹配。此外,用户通常与朋友关系彼此相关。
我正在尝试编写的一些查询:
给我所有我的朋友评价过的3家或更多明星的餐厅,这些餐馆都是我喜欢的食物(不包括那些我已经评论过的餐馆)
建议我认识的朋友(我想这应该是“所有的朋友都是我的朋友的朋友,但我的朋友还没有,按订单排序)
答案 0 :(得分: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
您可以在数据集Neo4j Webadmin Console上执行这些cypher查询,也可以在neo4j-shell中通过Spring Data Graph通过Cypher-Rest-Plugin远程执行。
还有一个screencast在cypher中讨论类似的查询。
如果您愿意,还可以使用Gremlin,Neo4j-Traversers或手动浏览getRelationships
。