2013-03-20 42 views
0

我對圖數據庫使用Neo4j,並使用Java從中提取路徑。 我有一個路徑,如下所示:如何用它們各自的屬性替換節點ID?

[(3)--[KNOWS,5]-->(4)--[KNOWS,6]-->(5)--[KNOWS,9]-->(6)--[KNOWS,10]-->(7)--[KNOWS,12]-->(9)] 

我想更換節點ID與自己屬性的路徑。 ex。對於屬性爲"name=ABC"的節點標識3,輸出應該類似於"[(ABC)--[KNOWS,5]....]" 它是如何完成的?

回答

2

我假設我們顯示的輸出是Path.toString()。沒有直接的方法來配置不同的輸出方式。但是你可以很容易地在路徑上迭代,並創建Path的自己的字符串表示:

String myCustomPathToString(Path path) { 
    StringBuilder sb = new StringBuilder(); 
    Node lastNode = null; 
    for (PropertyContainer propertyContainer: path) { 
     if (propertyContainer instanceof Node) { 
      lastNode = (Node)propertyContainer 
      Object default = lastNode.getId(); // as fallback 
      sb.append("(").append(propertyContainer.getProperty("name", default).append(")"); 
     } 
     if (propertyContainer instanceof Relationship) { 
      Relationship rel = (Relationship)propertyContainer ; 
      Object id = rel.getId(); 
      if (rel.getEndNode().equals(lastNode)) sb.append("<"); 
      sb.append("--[").append(rel.getType().name()).append(",").append(id).append("]--"); 
      if (rel.getStartNode().equals(lastNode)) sb.append(">");    
     } 
    } 
    return sb.toString(); 
} 

免責聲明:我沒有測試的代碼段的上方,所以它更多的是理念爲指導比一個工作的例子。

+0

感謝您的幫助。 – user2190709 2013-03-21 07:09:41

1

對於Cypher支架可以用提取物:

START n=node:index(key="value") 
    MATCH path=n-[:KNOWS*..5]-m 
    RETURN extract(x in nodes(path) : x.name) 

,如果你想保持的關係,你可以這樣做:

RETURN extract(x in path : coalesce(x.name?,ID(x)+":"+type(x))) 

見:http://console.neo4j.org/r/zvmyz

相關問題