3

次のグラフ設定があります。

start root=node(0)
create (F {name:'FRAME'}), (I {name: 'INTERACTION'}), (A {name: 'A'}), (B {name: 'B'}),
root-[:ROOT]->F, F-[:FRAME_INTERACTION]->I, I-[:INTERACTION_ACTOR]->A, I-[:INTERACTION_ACTOR]->B

また、次のクエリは重複した結果を返します。

START actor=node:node_auto_index(name='A') 
MATCH actor<-[:INTERACTION_ACTOR]-interaction-[:INTERACTION_ACTOR]->actor2,
   frame-[:FRAME_INTERACTION]->interaction 
RETURN frame, interaction

Query Results

+-----------------------------------------------------+
| frame                 | interaction                 |
+-----------------------------------------------------+
| Node[1]{name:"FRAME"} | Node[2]{name:"INTERACTION"} |
| Node[1]{name:"FRAME"} | Node[2]{name:"INTERACTION"} |
+-----------------------------------------------------+
2 rows
52 ms

結果を制限しようとしてもう 1 つ開始ノードを追加しても、同じ結果になります。

START actor=node:node_auto_index(name='A'), frame=node:node_auto_index(name='FRAME') 
MATCH actor<-[:INTERACTION_ACTOR]-interaction-[:INTERACTION_ACTOR]->actor2,
   frame-[:FRAME_INTERACTION]->interaction 
RETURN frame, interaction

クエリが重複した結果を返す理由を理解したいと思います。distinct を使用して一意の結果を返すことができることはわかっていますが、追加の操作 (distinct) を適用せずに、パスの一致によって 1 つの結果のみを返すようにクエリを変更することはできますか?

(セットアップとクエリはhttp://console.neo4j.org/?id=q2e0ayでテストできます)

4

1 に答える 1