0

次のようなグラフがあります。

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" になります。

4

0 に答える 0