6

グラフ データベース Neo4J を使用して有向木構造をモデル化しました。だから私はこのようなものを持っています: http://ouwarovite.net/YAPC/220px-Binary_tree.svg.png (必須のバイナリではありません)

私のデータベースのユーザーは、既存のノードの子ノードを自由に追加できるため、ツリーの高さと単一ノードの次数は不明です。

ここで、ツリーを次のようにクエリしたいと思います。ノード x から始めて、葉 x の子孫であるすべての葉を教えてください。

この種のクエリは Gremlin または Cypher で実行できますか? もしそうなら、どのようにすれば最大のパフォーマンスを達成できますか? (常に最大深度を指定する必要があるため、「ジェネリック」ツリーでクエリを実行する可能性は見つかりませんでした)

REST / JSON フレームワークと Java API を使用すると、次のようにできることはわかっています。

POST /db/data/node/51/traverse/node 
{ 
"return_filter" : 
    {
    "body" : "position.endNode().hasProperty('leave')" ,
    "language" : "javascript" 
     }, 
"relationships" : [ { "type" : "_default", "direction" : "out" } ] , 
"prune_evaluator" : { "name" : "none" , "language" : "builtin" }
}

(私の葉にはプロパティ 'leave' があり、私の端にはタイプがありません -> だから _default)

おそらくパフォーマンスが向上する、これを行うためのより簡単な/より良い方法はありますか?

4

1 に答える 1

6

Cypher は次のようになります。

start root=node({rootId}) 
match root-[*]->child
where child.leave
return child

rootId渡されるパラメータです。

于 2011-11-07T00:50:46.793 に答える