迭代匹配查询中的列表

时间:2016-09-29 21:16:48

标签: collections neo4j

我有一个关系,它有一个ids s_ids列表作为关系的属性。列表中的每个id对应于另一个节点,该节点的句子对应于id.I使用:

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

返回对应关系的所有句子, 结果如下:

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

对每个句子重复关系r我如何将对应于每个关系的句子列表分组以获得

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

由于

1 个答案:

答案 0 :(得分:1)

这应该返回每个r及其句子集合:

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;

为了获得更好的性能,如果你创建一个索引:Sentence(sentence_id),就像这样:

CREATE INDEX ON :Sentence(sentence_id);

然后这个查询(添加一个使用索引的提示)应该更快(因为可以使用索引找到b个节点):

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;