2

私は NEO4J を初めて使用し、特定の問題について助けが必要です。または、可能であれば答えます。

セットアップ: ユーザー (A、B、C、D) と製品 (1、2、3、4、5、6、7、8) の 2 つの異なるタイプのノードがあります。次に、ユーザーとユーザーの間に 2 つの異なるタイプの関係があります。ユーザーが製品を望んでおり、製品がユーザーによって所有されている製品。

  1. 1,2 は A が所有
  2. 3,4 は B が所有
  3. 5,6 は C が所有
  4. 7,8 は D が所有

  1. Bは1を望んでいます
  2. Cは3を望んでいます
  3. Dは5を望んでいます

というわけで今のところ問題なく、グラフデータも問題なく作成できています。私の質問はここから始まります。A が製品 8 を欲しがっている場合、円があります。

A-[:WANTS]->8-[:OWNEDBY]->D-[:WANTS]->5-[:OWNEDBY]->C-[:WANTS]->3-[:OWNEDBY]->B- [:WANTS]->1-[:OWNEDBY]->A

したがって、U-[:WANTS]->P-[:OWNEDBY]->U という明確なパターンがあります。

今私がやりたいことは、そのパターンに従って、開始ノード (製品を必要とする開始ユーザー) へのパスを見つけることです。Cypher を使用してこれを定義するにはどうすればよいですか? それとも別の方法が必要ですか?

ありがとうございます。

4

2 に答える 2

1

reduce私はこれがハッキングされ、すべての偶数(毎秒)の関係を数えることができると感じました:

MATCH p=A-[:OWNEDBY|WANTS*..20]->X
WITH r in relationships(p)
RETURN type(r),count(r) as cnt, 
WHERE cnt=10;

または、relの数が偶数であるすべてのパスをカウントすることもできます。

MATCH p=A-[:OWNEDBY|WANTS*..]->X    
RETURN p,reduce(total, r in relationships(p): total + 1)  as tt
WHERE tt%2=0;

ただし、グラフは厳密なパターンを持っている必要があります。この場合、ownedbyとwantsのセットからのすべての着信関係は、同じセットからのすべての発信関係とは異なる必要があります。つまり、このパターンは存在できません。A-[:WANTS]->B-[:WANTS]->C or A-[:OWNEDBY]->B-[:OWNEDBY]->C

クエリの構文はおそらく間違っていますが、ロジックは暗号で実装できます。またはgremlinを使用すると、どこかでgremlinクエリを見たと思います。ここでは、パターンを定義し、そのパターンを介してエンドノードまでn回ループすることができます。

于 2013-02-26T09:15:35.423 に答える