【发布时间】:2012-12-07 06:15:28
【问题描述】:
我有一个由活动目录生成的组织的 neo4j 图。
唯一存在的关系是 MANAGE,节点 1 是根节点(组织的顶部),所有其他成员最终都通过 MANAGE 关系向节点 1 报告。
我还没有接触过 Neo4j 遍历,但我想提供一个以逗号分隔的用户名列表,并生成一个由
组成的树结构根节点
我已经可以在 Neo4j 中获得 LCA,我只需要弄清楚从那里去哪里。
String users = "tom,sarah,liam";
List<Node> nodeSet = new ArrayList<Node>();
String usernames[] = users.split(",");
for (String user : usernames) {
Node found = nodeIndex.get("username", user).getSingle();
if (found != null) nodeSet.add(found);
}
Node lca = getLCA(nodeSet);
private Node getLCA(List<Node> nodes) {
RelationshipExpander expander = Traversal.expanderForTypes(RelTypes.MANAGE, Direction.INCOMING);
return AncestorsUtil.lowestCommonAncestor(nodes, expander);
}
因此,如果我提供列表“sarah,tom,liam”,则会创建以下结构:
Root
|
|
|
John
|
Jane
/ \
Sarah Jerome
/ \
Liam Tom
我想在 XML 或 JSON 中这样做:(下面的 XML 示例)
<user>
<name>Root</name>
<children>
<user>
<name>John</name>
<children>
<user>
<name>Jane</name>
<children>
<user>
<name>Sarah</name>
</user>
<user>
<name>Jerome</name>
<children>
<user>
<name>Liam</name>
</user>
<user>
<name>Tom</name>
</user>
</children>
</user>
</children>
</user>
</children>
</user>
</children>
</user>
有人可以指出我从哪里开始的正确方向吗?
【问题讨论】:
-
请粘贴您“在 Neo4j 中获取 LCA”的部分代码/步骤。
-
@ulkas 我已经把它贴在上面了。
-
我已经创建了一些遍历,它们可以获取 root -> LCA 和 LCA -> 每个用户,但我不确定我是否可以将其编写为一个遍历器,或者我将如何加入遍历结果。跨度>
标签: algorithm graph neo4j graph-theory graph-algorithm