1

Neo4jを使用してテストアプリケーションを構築しています。小さなソーシャルネットワークをモデル化して、次のことを見つけたいと思います。

  1. ユーザーXのすべての友達
  2. ビールが好きなユーザーのX人の友達の友達

私は「知っている」関係のモデリングに固執しました。3人のユーザーA、B、Cを取り上げましょう。それらの間の関係を1つだけ定義するだけで十分ですか?

Aは知っているBBは
知っているC

または、「双方向」の関係を作成し、それを明示的に提供する必要があります

AはBを知っているのでBはABを知って
いるのでCはBを知っている

それは関係の数を増やすでしょう、しかし多分それは必要です。

同じ質問が好きな飲み物に関連しています。

好きなビール

私も定義する必要がありますか?

ビールはAに好かれています

4

1 に答える 1

4

知っているbと知っているbを区別できるようにしたい場合は、2つの関係が必要です。それ以外の場合、クエリ時に、方向を省略することで両方を簡単に取得できます。

同様に、ビールが好まれているので、実際には一方向を定義するだけで済みます。

実際の例:接続が相互であるfacebook / LinkedInモデルは、1つの方向/関係のみを必要としますが、ある人が別の人をフォローできるTwitterモデル(ただし、他の人はそれらをフォローバックする必要はありません)、あなたは必要です2つの関係-各方向に1つ。

いくつかのクエリ例で更新します。

CREATE 
(joe {name:"Joe"}), 
(jim {name:"Jim"}), 
(bob {name:"Bob"}), 
(beer {name:"Beer"}),
joe-[:friends_with]-jim,
joe-[:friends_with]-bob,
bob-[:likes]->beer;

友達のために:

START person=node:node_auto_index(name="Joe")     
MATCH (person)-[:friends_with]-(friend)
RETURN person, friend;

そしてビールが好きな友達:

START person=node:node_auto_index(name="Joe"), beer=node:node_auto_index(name="Beer")     
MATCH (person)-[:friends_with]-(friend)-[:likes]->(beer)     
RETURN person, friend, beer;
于 2012-10-19T13:55:32.913 に答える