2017-12-04 2 views
1

実際に私はTEIでエンコードされたXML-Textをグラフ(ノードのチェーンとしての単語)でモデリングしています。私は最短のパスとグラフの中で最短のパスしか見つけません。 enter image description here 私のクエリはcypherでパスを見つける方法ungreedyの方法

MATCH (w0:XmlWord)-[:NEXT*..6]->(n:XmlTag {_name:'lb'})-[:NEXT*..6]->(w1:XmlWord) 
RETURN id(w0), id(w1); 

のように見えると私は唯一の可能な最短パスを必要とするが、のNeo4jは、第6のステップになるまで私はすべての可能性を提供します。結果はVorträge、ユーバー、およびFreiherrnノードあるべきのNeo4jは、第6のステップにまで戻って、すべての可能な組み合わせを私に与え

誰かがサンプルデータベースにアクセスする必要がある場合は、私に知らせてください。

+2

非常に良い質問と私はいくつかの興味深い答えがあると思います。ただし、この例の戻り値を明確にしてください。結果は2つあります(w1:Vortrage、w2:uber)。 (w1:des、w2:Freiherrn)? –

+0

タイプミスがあるように見えます。クエリは 'w0'と' w1'のIDを返します。また、現在返されているすべての結果を表示できますか? – cybersam

+0

あなたは正しいです。私はIDと2つの単語ノードを探しています。しかし、それはその道を知るために必要なことです。 –

答えて

0

これは、同じパスで複数の可変長関係を使用している場合は少し難しいです。ただし、パスの長さで結果を並べ替えることができ、最小の長さのものをフィルタリングすることができます。

MATCH path = (:XmlWord)-[:NEXT*..6]->(:XmlTag {_name:'lb'})-[:NEXT*..6]->(:XmlWord) 
WITH length(path) as length, collect(path) as paths 
ORDER BY length ASC 
LIMIT 1 
UNWIND paths as path 
WITH head(nodes(path)) as first, last(nodes(path)) as last 
RETURN id(first), id(last); 
+0

私のために働く;-)今私は長いパスでそれをテストしています。 –

関連する問題