0

特定の人を知っている隣人との会話時間の相対的な割合を調べたいと思います。

たとえば、ノードAを最初に観察する場合、次のクエリで実行される、すべてのネイバーとの会話に彼が費やした時間を知る必要があります。

neo4j-sh (0)$ start a = node(351061) match (a)-[r:TALKED_TO]->(b) return sum(r.duration)
==> +-----------------+
==> | sum(r.duration) |
==> +-----------------+
==> | 12418           |
==> +-----------------+
==> 1 row, 0 ms

次に、彼の隣人のどれが特定の人を知っているか(たとえばc)を確認し、bがcを知っているaとbの間の会話の期間のみを合計する必要があります。

neo4j-sh (0)$ start a = node(351061) match (a)-[r:TALKED_TO]->(b)-[p:KNOWS]->(c) return sum(r.duration)
==> +-----------------+
==> | sum(r.duration) |
==> +-----------------+
==> | 21013           |
==> +-----------------+
==> 1 row, 0 ms

ここで論理的ではないように思われるのは、2番目の合計が最初の合計よりも大きいのに対し、2番目の合計は最初の合計の一部であると想定されていることです。そのような結果を得るための問題が何であるかを誰かが知っていますか?エラーは15000人中7人のユーザーに現れました。

4

1 に答える 1

2

そのクエリで特定の人物Cを見ているわけではありません。すべてのパスを任意の:KNOWS関係に一致させているため、a->b->cとa->b->dがある場合、a->b間の期間は2回カウントされます。

おそらくあなたがする必要があるのは、代わりにこれです:

start a = node(351061), c=node(xxxxx) // set c explicitly
match (a)-[r:TALKED_TO]->(b)
where b-[:KNOWS]->c // putting this in the where clause forces you to set C
return sum(r.duration)

コンソールの例を次に示します:http: //console.neo4j.org/r/irm0zy

match結果を広げ、where引き締めることを忘れないでください。でこれを行うこともできmatchますが、でcを指定する必要がありますstart

集計関数が何をしているかをテストする良い方法は、名前付き変数をすべて返す(または返すことができるパスを設定する)ことです。これにより、集計が小計に分割されていることがわかります。そのようです:

start a=node(1) 
match a-[r:TALKED_TO]->b-[:KNOWS]->c 
return sum(r.duration), a,b,c;
+-----------------------------------------------------------------------------------------------+
| sum(r.duration) | a                       | b                       | c                       |
+-----------------------------------------------------------------------------------------------+
| 20              | Node[1]{name:"person1"} | Node[2]{name:"person2"} | Node[4]{name:"person4"} |
| 20              | Node[1]{name:"person1"} | Node[2]{name:"person2"} | Node[3]{name:"person3"} |
| 20              | Node[1]{name:"person1"} | Node[5]{name:"person5"} | Node[6]{name:"person6"} |
+-----------------------------------------------------------------------------------------------+
于 2012-10-01T07:13:51.983 に答える