После прочтения документации по apo c я обнаружил функцию apo c .path.expandConfig, которая почти решила мою проблему. Таким образом, решение:
- получить пути к узлам, которые являются Элементом или Листом
- получить пути к системным узлам
- для пути получить отношение возврата и возврата сегмента путь как: (начало) - [отношение] - (конец)
- объединение этих сегментов для удаления дубликатов
Это работает, и моя следующая задача - проверить производительность с большими графиками. Какие-нибудь мысли? @ Никто @ TheCrusher
match (start: System)
where id(start)=1
call apoc.path.expandConfig(start, { labelFilter: 'Element|Leaf' }) yield path
unwind relationships(path) as x
return startnode(x) as s, x as r, endnode(x) as e
union
match (start: System)
where id(start)=1
call apoc.path.expandConfig(start, { labelFilter: '>System' }) yield path
unwind relationships(path) as x
return startnode(x) as s, x as r, endnode(x) as e
РЕДАКТИРОВАТЬ: Я пришел с другим запросом, который выполняет работу:
match (s: System)-[r*]-(m)
where id(s)=1 and (m:Element or m:Leaf or m:System) and not (s)-[*]-(:System)-[*]-(m)
unwind r as r1
with distinct r1 as rd
return startnode(rd), rd, endnode(rd)