2017-09-28 19 views
0

私はDNA SNPの階層ツリー(DAG)をロードしました。私は最低共通祖先を特定したい。Neo4j最低共通祖先ノードが見つかりません

このクエリは動作しますが、単一正しいノード収量:しかし、この1つは何も結果が得られていない

Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-BY13828'}) 
match path=(n)-[:SNPParent*..99]->(MRCA)<-[:SNPParent*..99]-(m) 
return MRCA.SNP 

を:

Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-S25289'}) 
match path=(n)-[:SNPParent*..99]->(MRCA)<-[:SNPParent*..99]-(m) 
return MRCA.SNP 

両方歩留まりの祖先を求めている2つのクエリは、そのうちのいくつかのノードにもかかわらず、共有されている:

MATCH p=(n:SNPNode{SNP:'R-Z11'})-[r:SNPParent*..66]->(m) RETURN m.SNP 

m.SNP 
R-Z338 
R-Z8 
R-Z7 
R-Z2 
R-Z345 
R-Z27 
R-Z30 
R-Z9 
R-L48 
R-Z301 
R-Z381 
R-U106 
R-L151 
R-L51 
R-L23 
R-M269 
R-P297 
R-L389 
R-L754 
R-M343 

MATCH p=(n:SNPNode{SNP:'R-Z25289'})-[r:SNPParent*..66]->(m) RETURN m.SNP 

m.SNP 
R-S16701 
R-S1774 
R-Z341 
**R-Z11** 
R-Z338 
R-Z8 
R-Z7 
R-Z2 
R-Z345 
R-Z27 
R-Z30 
R-Z9 
R-L48 
R-Z301 
R-Z381 
R-U106 
R-L151 
R-L51 
R-L23 
R-M269 
R-P297 
R-L389 
R-L754 
R-M343 

R-Z11が2番目のクエリのパスにあり、それ自体が祖先であると思われるようです。言い換えれば、LCAが最短経路の終わりにあることがあります。 R-Z11が最短経路にあるかどうかにかかわらず結果として返すようにこれに対処する方法はありますか?

+0

あなたは問題のダブルチェックノードにすることもできます。結果が得られなかったクエリでは、使用されているSNPは「R-Z11」と「R-S25289」です。しかし、後で祖先を探すために使ったクエリは、「R-Z11」と「R-Z25289」でした。あなたはSをZに変更しました。 – InverseFalcon

答えて

0

可変長パスの下限が0であることを確認したいと思います(現在のクエリのように下限を省略すると、デフォルトは1になります)。これにより、開始ノードと終了ノードをMRCAとの可能な一致と見なすことが可能になります。ここで

Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-S25289'}) 
match path=(n)-[:SNPParent*0..99]->(MRCA)<-[:SNPParent*0..99]-(m) 
return MRCA.SNP 
+0

提案をありがとう。しかし、ゼロの下限を追加すると結果が得られませんでした。 –

0

作品クエリです:

match p=(n:SNPNode{SNP:'R-Z11'})<-[:SNPChild*0..99]-(MRCA:SNPNode)-[:SNPChild*0..99]->(m:SNPNode{SNP:'R-BY13828'}) 
return MRCA.SNP 

それとも、ブールフラグで最低の共通の祖先(MRCA)を取得する:

match p=(n:SNPNode{SNP:'R-Z11'})<-[:SNPChild*0..99]-(MRCA:SNPNode)-[:SNPChild*0..99]->(m:SNPNode{SNP:'R-BY13828'}) unwind(nodes(p)) as pn 
return case when pn.SNP=MRCA.SNP then True else False end as MRCA,pn.SNP 

この出力

MRCA SNP

FALSE R-Z11

FALSE R-Z338

TRUE R-Z8

FALSE R-BY13828

関連する問題