我對圖數據庫使用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]....]"
它是如何完成的?
我對圖數據庫使用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]....]"
它是如何完成的?
我假設我們顯示的輸出是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();
}
免責聲明:我沒有測試的代碼段的上方,所以它更多的是理念爲指導比一個工作的例子。
對於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)))
感謝您的幫助。 – user2190709 2013-03-21 07:09:41