Перебор списка в запросе соответствия

#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;