我有一个树设置,其中每个关系可以与下一个节点具有“左”或“右”关系类型。除终端节点外,节点都是相同的类型。
我如何对路径进行排序,以便我在深度优先搜索顺序中将它们排在第一位?我知道我可以拉动路径,并可能在我自己的代码中执行此操作。但有没有办法用Cypher做到这一点?
类似:匹配路径=(n) - [r *] - >(n:终端)按左移第一回路路径
答案 0 :(得分:1)
我似乎找到了一种使用reduce和extract组合的方法。我不确定这是否是最有效的方式,但它确实有效。
首先,为路径中的每个关系构建2条信息,并将它们组合成一个字符串。
其次,将每个关系字符串与reduce组合成一个长字符串,用于路径中的所有关系,以获得第一条路径的011121。首先按深度排序此字符串顺序,因为它有效地按级别排序然后左/右。
match
p=(n)-[r*]->(terminal_node)
where n.id = 'root node id'
with
p,
terminal_node,
extract(
r IN relationships(p) |
REDUCE(
c=-1,
indx in range(0, size(relationships(p))-1) |
case when relationships(p)[indx] = r then indx else c end
) + case when type(r) = 'LEFT' then '1' else '2' end
) as rel_index_and_order
return
p,
terminal_node,
REDUCE(s='', r in rel_index_and_order | s+r ) as path_sort
order by path_sort