4

2 つの関係を探しているときにこのクエリを作成する方法を見つけましたが、クエリにさらに関係を追加する方法がわかりません。

「読者」と「本」をノードとするブック クラブ データベースがあるとします。「本」ノードには「ジャンル」属性があります (本がフィクション、ノンフィクション、バイオグラフィー、リファレンスなどであることを定義するため)。「読者」ノードと「本」ノードの間には関係「HasRead」があります。誰かが特定の本を読んだ。

フィクションとノンフィクションの両方の本を読んだ読者を見つけたい場合は、次の Cypher クエリを実行できます。

Start b1=node:MyBookIndex('Genre:Fiction'), 
      b2=node:MyBookIndex('Genre:Non-Fiction')
Match b1-[:HadRead]-r-[:HasRead]-b2
Return r.ReaderName

上記のクエリの鍵はr、'reader' ノードのエイリアスにフィードする 2 つの book エイリアスを持つ Match 句です。

質問: フィクションANDノンフィクションAND参考書を読んだことがあるユーザーを検索するには、どのようにクエリを作成すればよいですか? 探しているものが 2 つ以上ある場合に Match 句をどのように記述するかについて、私は行き詰っています。

4

2 に答える 2

10

MATCHコンマで区切って、1 つの句で複数の行を指定できます。たとえば、次の 2 つのMATCH句は意味的に同等です (エンジンによって同じように評価されます)。

//these mean the same thing!
match a--b--c
match a--b, b--c

これらの一致はいくつでも持つことができます。したがって、それをクエリにプラグインすると、次のようになります。

start b1=node:MyBookIndex('Genre:Fiction'), 
      b2=node:MyBookIndex('Genre:Non-Fiction'),
      b3=node:MyBookIndex('Genre:Reference')
match b1-[:HasRead]-r,
      b2-[:HasRead]-r,
      b3-[:HasRead]-r
return r.ReaderName
于 2013-05-06T17:24:37.423 に答える
0

' 句で cypher '使用できます-

start b1=node:MyBookIndex('Genre:Fiction'), 
      b2=node:MyBookIndex('Genre:Non-Fiction'),
      b3=node:MyBookIndex('Genre:Reference')
match b1-[:HasRead]-r-[:HasRead]-b2
with b3, r
match b3-[:HasRead]-r
return r.ReaderName
于 2013-05-06T17:08:22.687 に答える