7

私はneo4jとグラフデータベース全般に非常に慣れていません。アプリのプロトタイプを作成していますが、これらのクエリをどのように記述すればよいかわかりません

私はこのドメインを持っています:

ユーザー レストラン レビュー TypeOfFood

レストランには 1 つまたは複数の 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 コンソールで実行できますが、neo4j シェルでも、 Spring Data Graphを介して Cypher-Rest-Plugin を介してリモートで実行できます。

cypher で同様のクエリについて説明しているスクリーンキャストもあります。

必要に応じて、 GremlinNeo4j-Traversers、または手動トラバースを使用することもできgetRelationshipsます。

于 2011-08-05T08:09:55.617 に答える