2012-12-07 86 views
0

我有一個由活動目錄生成的組織的neo4j圖。neo4j - 遍歷結構來構建XML

唯一存在的關係是MANAGE,節點1是根節點(組織的頂部),所有其他成員最終通過管理關係報告給節點1。

我沒碰過Neo4j的穿越,但我想提供一個逗號分隔的用戶名列表,併產生一個樹形結構包括

根節點< - 孩子下降到LCA和LCA < - 兒童

我已經可以在Neo4j中獲得生命週期評估了,我只需要確定從哪裏去。

 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); 
} 

所以,如果我提供的名單「莎拉,湯姆,利亞姆」下面的結構將被創建:

  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> 

有人能指出我從哪裏開始的正確方向嗎?

+0

請粘貼您的代碼/步驟,你「獲得LCA在Neo4j」的部分。 – ulkas

+0

@ulkas我把它粘貼在上面。 – user1277546

+0

我創建了一些遍歷,它們獲得root - > LCA和LCA - >每個用戶,但是我不確定是否可以將其作爲一個遍歷器來編寫,或者我將如何加入遍歷結果。 – user1277546

回答

1

類似的東西:http://console.neo4j.org/r/canhtg

start n=node(0) 
match path=n-[:MANAGE*]-m 
with nodes(path) as nodes, length(path) as l 
return head(nodes), head(tail(nodes)),tail(tail(nodes)),l 

它所做的是:

  • 你匹配從起始節點路徑任意長度,終於觸及的所有節點在(子) - 圖
  • 您將路徑的節點聚合到名爲節點的集合中
  • 您返回該集合中的第一個,第二個,第三個等元素在個別
+0

你能詳細說明這是如何工作嗎? – user1277546