【问题标题】:How to store tree structure using neo4j and gremlin如何使用 neo4j 和 gremlin 存储树结构
【发布时间】:2011-10-17 11:50:10
【问题描述】:
我想在 Java 中使用 neo4j 本地数据库和 Gremlin 存储以下目录树结构。
(根)
/ \
目录 2 目录 3
/ \ \
目录 4 目录 5 目录 6
/
目录7
我已经定义了一个方法 StorePath(String path)。
我想要什么:当我用 path = "Root\Dir2\Dir4\Dir7" 调用 StorePath(path) 时,数据应按如下方式存储
根
/
目录2
/
目录4
/
目录7
其中 Root 和 Dir* 是具有空白边的顶点。
请帮我写java代码。
【问题讨论】:
标签:
graph
neo4j
graph-databases
gremlin
【解决方案1】:
private static final RelationshipType SUB_DIR = DynamicRelationshipType.withName("SUB_DIR");
public void storePath(String path) {
Node dir = graphDb.getReferenceNode();
for (String name : path.split(File.separator)) {
dir = obtainSubDir(dir, name);
}
}
private Node obtainSubDir(Node dir, String name) {
Node subDir = getSubDir(dir,name);
if (subDir!=null) return subDir;
return createSubDir(dir, name);
}
private Node getSubDir(Node dir, String name) {
for (Relationship rel : dir.getRelationships(SUB_DIR, Direction.OUTGOING)) {
final Node subDir = rel.getEndNode();
if (subDir.getProperty("name", "").equals(name)) return subDir;
}
return null;
}
private Node createSubDir(Node dir, String name) {
Node subDir = dir.getGraphDatabase().createNode();
subDir.setProperty("name", name);
dir.createRelationshipTo(subDir, SUB_DIR);
return subDir;
}