次のようなグラフがあります。
START root=node(0)
CREATE
(Dark { name:"dark" }),(Colors { name:"colors" }),(Blue { name:"blue" }),
(Indigo { name:"indigo" }),(Red { name:"red" }),(Orange { name:"orange" }),
(LightOrange { name:"lightorange" }),(Tangerine { name:"tangerine" }),
Dark-[:CHILD]->Colors,Blue-[:CHILD]->Colors,Indigo-[:CHILD]->Blue,
Red-[:CHILD]->Colors,Orange-[:CHILD]->Red,LightOrange-[:CHILD]->Orange,
Tangerine-[:CHILD]->Orange
これは本質的にツリーであり、枝の間にいくつかの接続があります。
したがって、「dark」、「tangerine」、および「indigo」を入力すると、次のように最新の共通の祖先を取得できます。
START a=node(*), b=node(*),c=node(*)
MATCH pa=a-[s:CHILD*]->x, pb=b-[s:CHILD*]->x,pc=c-[s:CHILD*]->x
WHERE a.name = 'dark' AND b.name = 'tangerine' AND c.name = 'indigo'
RETURN x
ORDER BY length(pa+pb+pc)
LIMIT 1
私の質問は、先祖になる可能性のあるツリーブランチの最小セットのノードを取得するにはどうすればよいですか? たとえば、上記のクエリの結果は、"dark"、"orange"、"red"、"colors"、"indigo" になります。