使用Neo4J对有向树进行通用遍历

时间:2011-10-07 12:47:46

标签: graph traversal neo4j tree-traversal graph-databases

我使用图形数据库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" }
}

(我的叶子有属性'离开',我的边缘没有类型 - >所以_default)

是否有更简单/更好的方法可以提高性能?

1 个答案:

答案 0 :(得分:4)

Cypher看起来像这样:

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

rootId是要传入的参数。