У меня есть таксономия как график Neo4j. Основная структура такова:Cypher: Обратный путь, где начало и конец могут быть равны
taxonomyName -HAS_ROOT_TERM-> root -IS_BROADER_THAN-> term -IS_BROADER_THAN-> term'-IS_BROADER_THAN-> term'' - ...
Теперь я хочу, чтобы данный термин - например. Термин «» - его путь от корня таксономии (или нескольких путей, обратите внимание, что может быть несколько таксономий с несколькими правомочных корнями, структура на самом деле является поли-иерархия):
START n=node:index("id:term''Id")
MATCH p = taxonomy-[:HAS_ROOT_TERM]->r-[:IS_BROADER_THAN*]->n
RETURN TAIL(EXTRACT(n in NODES(p) : n.id))
TAIL
исключает первое узел к тому, что я не возвращаю узел таксономии. Это работает отлично, за исключением случаев, когда я напрямую запрашиваю корень. Тогда ничего не возвращается. Конечно: я ищу путь, по крайней мере, с тремя элементами, узлом таксономии, корневым узлом и любым потомком корня. Теперь мне нужно будет выразить, что r
и n
могут быть равны. Я попытался сделать связь IS_BROADER_THAN
необязательной, но затем возвращается только null, потому что шаблон не найден.
Как я могу ограничить свой запрос путями, включая корневой термин, и разрешить пути длины один, содержащий только корневой термин?
Спасибо!