2016-09-29 2 views
0

Ich habe eine Beziehung, die eine Liste von IDs s_ids als eine Eigenschaft der Beziehung hat. Jede ID in der Liste zu einem anderen Knoten entsprechen, die einen Satz entsprechend einem id.I verwendet:Iterate über eine Liste in einer Match-Abfrage

MATCH (c: term)-[r: semrel]->(t: term), (b: Sentence) 
Where r.source = "xyz" And b.sentence_id IN r.s_id 
return r,b 

alle Sätze der Beziehung entspricht, zurückzukehren, das Ergebnis wie folgt aussieht:

r b 
w abc 
w rty 
w zxv 
e nmx 
e qrt 

die Beziehung r wird für jeden Satz wiederholt, wie kann ich die Liste der Sätze Gruppe zu jeder Beziehung entsprechenden

r b 
w abc, rty, zxv 
e nmx,qrt 

Dank erhalten

Antwort

1

Dies sollte jede r und seine Sammlung von Sätzen zurück:

MATCH (c: term)-[r: semrel]->(t: term), (b: Sentence) 
WHERE r.source = "xyz" AND b.sentence_id IN r.s_i 
RETURN r, COLLECT(b) AS sentences; 

Für eine bessere Leistung, wenn Sie sich auf einen Index erstellen: Satz (sentence_id), wie folgt aus:

CREATE INDEX ON :Sentence(sentence_id); 

dann diese Die Abfrage (die einen Hinweis zur Verwendung des Index hinzufügt) sollte schneller sein (da die b-Knoten unter Verwendung des Indexes gefunden werden können):

MATCH (c: term)-[r: semrel]->(t: term), (b: Sentence) 
USING INDEX b:Sentence(sentence_id) 
WHERE r.source = "xyz" AND b.sentence_id IN r.s_i 
RETURN r, COLLECT(b) AS sentences; 
Verwandte Themen