【问题标题】:OrientDB get all connected vertices from a starting vertexOrientDB 从一个起始顶点获取所有连接的顶点
【发布时间】:2015-11-19 14:36:26
【问题描述】:

我正在使用 Neo4j 和 OrientDB,我将比较它们在遍历方面的性能和功能(Neo4j 中的 Java Traversal API 和 OrientDB 中的 Native Fluent API)。

对于 OrientDB,应该可以从特定顶点开始并获取所有可到达的顶点,并且每个单独步骤上的属性 access 的交集也存在。例如,如果您有图 A --> B --> C --> D,其中 A、B 和 C 具有 access = www em> 和 D 的值为 access = https,应返回顶点 A、B 和 C

我最近问了一个问题,然后我发布了我的解决方案,如何在 Neo4j 上进行属性比较。

Neo4j node property comparison during traversal

在 Neo4j 中,可以创建一个 TraversalDescription,它描述了遍历的规则和行为。例如以下:AccesListEvaluator 将比较两个连接节点的属性,正如您在上面提到的 Neo4j 比较发布的解决方案中看到的那样。

TraversalDescription td = db.traversalDescription().depthFirst()
            .relationships(RelationshipLabel.REFERENCED_BY, Direction.OUTGOING)
            .evaluator(new AccessListEvaluator());

如果您执行以下代码示例,您将从 startNode 取回所有可到达的节点,您可以遍历它们并提取它们的所有属性。

td.traverse(startNode).nodes();

我需要所有节点,因为我必须提取它们的属性并将其存储在自己的数据结构中。

是否可以使用 OrientDB Native Fluent API 提供类似的解决方案?我检查了手册Java Traverse,但我无法从给定的示例中偏离可行的解决方案。如果我执行以下代码示例,我只会获取目标的属性以及 IN 和 OUT 连接。

for (OIdentifiable oi : new OTraverse().field("in").field("out").target(new ORecordId("#24:0"))) {
            System.out.println(oi);
}

在我看来,您只能取回与其他节点的可能连接。 有没有机会,用 Native API 来获取每个顶点和每个顶点的属性?

希望我的问题可以理解。 提前致谢

【问题讨论】:

    标签: properties comparison traversal orientdb vertex


    【解决方案1】:

    我想我正在解决类似的问题。我正在使用 python (PyOrient) 连接到 OrientDB,我通常使用 SQL 语法。我一直在尝试利用 TRAVERSE 或 fetchPlan。

    当我使用 TRAVERSE 时,我可以在控制台中使用类似这样的查询来获取所有顶点和 eges(在工作室中的结果相同):

    orientdb {db=FetchPlanTesting}> traverse * from level01
    
    ----+------+---------+------------------+------------+------+------+-------------
    #   |@RID  |@CLASS   |name              |in_belongsTo|out   |in    |out_belongsTo
    ----+------+---------+------------------+------------+------+------+-------------
    0   |#11:0 |Level01  |Item01_at_Level01 |[size=2]    |null  |null  |null
    1   |#20:1 |belongsTo|null              |null        |#12:1 |#11:0 |null
    2   |#12:1 |Level02  |Item02_at_Level02 |[size=2]    |null  |null  |[size=1]
    3   |#20:4 |belongsTo|null              |null        |#13:0 |#12:1 |null
    4   |#13:0 |Level03  |Item01_at_Level03 |[size=2]    |null  |null  |[size=1]
    5   |#20:19|belongsTo|null              |null        |#14:7 |#13:0 |null
    6   |#14:7 |Level04  |Item08_at_Level04 |[size=2]    |null  |null  |[size=1]
    7   |#20:34|belongsTo|null              |null        |#15:6 |#14:7 |null
    8   |#15:6 |Level05  |Item07_at_Level05 |null        |null  |null  |[size=1]
    9   |#20:50|belongsTo|null              |null        |#15:22|#14:7 |null
    10  |#15:22|Level05  |Item023_at_Level05|null        |null  |null  |[size=1]
    11  |#20:27|belongsTo|null              |null        |#14:15|#13:0 |null
    12  |#14:15|Level04  |Item016_at_Level04|[size=2]    |null  |null  |[size=1]
    13  |#20:42|belongsTo|null              |null        |#15:14|#14:15|null
    14  |#15:14|Level05  |Item015_at_Level05|null        |null  |null  |[size=1]
    15  |#20:58|belongsTo|null              |null        |#15:30|#14:15|null
    16  |#15:30|Level05  |Item031_at_Level05|null        |null  |null  |[size=1]
    17  |#20:8 |belongsTo|null              |null        |#13:4 |#12:1 |null
    18  |#13:4 |Level03  |Item05_at_Level03 |[size=2]    |null  |null  |[size=1]
    19  |#20:15|belongsTo|null              |null        |#14:3 |#13:4 |null
    ----+------+---------+------------------+------------+------+------+-------------
    LIMIT EXCEEDED: resultset contains more items not displayed (limit=20)
    

    我在任何节点上的唯一属性是name。我似乎记得我可以过滤掉belongsTo 边缘(或者至少只查找特定的类),但我已经切换到尝试fetchPlan,所以我可以返回一个嵌套的JSON blob。该查询很简单(`,但我试图找出如何最好地限制深度而不是实际返回边缘作为结果的一部分。

    这是控制台中的查询和结果(在工作室中相同): orientdb {db=FetchPlanTesting}> SELECT @this.toJSON('fetchPlan:*:-1') from 11:0

    ----+------+--------------------------------------------------------------------------------------------------------------------------------------------
    #   |@CLASS|this
    ----+------+--------------------------------------------------------------------------------------------------------------------------------------------
    0   |null  |{"name":"Item01_at_Level01","in_belongsTo":[{"out":{"name":"Item02_at_Level02","in_belongsTo":[{"out":{"name":"Item01_at_Level03","in_bel...
    ----+------+--------------------------------------------------------------------------------------------------------------------------------------------
    
    1 item(s) found. Query executed in 0.024 sec(s).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2018-04-26
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多