7

我对 neo4j 和一般的图形数据库都很陌生。我正在设计一个应用程序的原型,但我不知道应该如何编写这些查询

我有这个域:

用户餐厅评论 TypeOfFood

因此,一家餐厅有一个或多个 TypeOfFood,用户会留下有关餐厅的评论。用户有一些喜欢的食物,与餐厅出售的 TypeOfFood 相匹配。用户也通过典型的朋友关系相互关联。

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

  • 给我所有我朋友评价为 3 星或以上且制作我喜欢的食物的餐厅(不包括那些我已经评论过的餐厅)

  • 推荐我可能认识的朋友(我想这应该是“所有我朋友的朋友但还不是我的朋友,按一些东西排序)

4

1 回答 1

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中对您的数据集执行这些密码查询,也可以在 neo4j-shell 中,通过 Cypher-Rest-Plugin 通过Spring Data Graph远程执行这些查询。

还有一个截屏视频讨论了 cypher 中的类似查询。

如果您愿意,您还可以使用GremlinNeo4j-Traversers或手动遍历。getRelationships

于 2011-08-05T08:09:55.617 回答