#collections #neo4j
#Коллекции #neo4j
Вопрос:
У меня есть отношение, которое имеет список идентификаторов s_ids в качестве свойства отношения. каждый идентификатор в списке соответствует другому узлу, у которого есть предложение, соответствующее идентификатору.Я использовал:
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:
Это должно возвращать каждое 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;