我怎么能在neo4j中写这个查询?

时间:2011-08-05 06:04:15

标签: neo4j graph-databases

我对neo4j和图表数据库都很新。我正在为一个应用程序进行原型设计,我不知道该如何编写这些查询

我有这个域名:

用户 餐厅 评论 TypeOfFood

因此,Restarurant有一个或多个TypeOfFood,用户会留下关于餐馆的评论。用户有一些首选的食物,与餐馆出售的TypeOfFood相匹配。此外,用户通常与朋友关系彼此相关。

我正在尝试编写的一些查询:

  • 给我所有我的朋友评价过的3家或更多明星的餐厅,这些餐馆都是我喜欢的食物(不包括那些我已经评论过的餐馆)

  • 建议我认识的朋友(我想这应该是“所有的朋友都是我的朋友的朋友,但我的朋友还没有,按订单排序)

1 个答案:

答案 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中讨论类似的查询。

如果您愿意,还可以使用GremlinNeo4j-Traversers或手动浏览getRelationships