0

我正在使用Neo4j图形数据库,并使用 Java 从中提取路径。我有如下路径:

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

我想用它们的属性替换路径中的节点 ID。前任。对于具有属性的节点 id 3 "name=ABC",输出应该像"[(ABC)--[KNOWS,5]....]" How it can be done?

4

2 回答 2

2

我假设我们显示的输出是Path.toString()。没有直接的方法来配置不同的输出方式。但是,您可以轻松地遍历路径并创建自己的路径字符串表示:

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

免责声明:我没有测试上面的代码段,所以它更像是一个指导而不是一个工作示例。

于 2013-03-20T12:55:55.277 回答
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

于 2013-03-20T13:11:03.320 回答