【问题标题】:Gremlin get Edge with specific start and end nodeGremlin 获取具有特定开始和结束节点的 Edge
【发布时间】:2016-10-30 13:59:37
【问题描述】:

我正在使用 Gremlin 来处理 Titan Graph。 我正在努力寻找一种方法来建立一种非常具体的关系。

我有标签、属性和可能的​​开始和结束节点列表。

我希望所有的关系都与此匹配。

我已经有了这个来获取所有匹配标签和属性的关系:

GraphTraversal<Edge, Edge> tempOutput = g.E().hasLabel(relationshipStorage.getId());

            if(relationshipStorage.getProperties() != null)
            {
                for (Map.Entry<String, Object> entry : relationshipStorage.getProperties().entrySet())
                {
                    if (tempOutput == null)
                    {
                        break;
                    }
                    tempOutput = tempOutput.has(entry.getKey(), entry.getValue());
                }
            }

但是我没有找到一种方法来获得它具有特定的 start 和 endNode。 我不想在两个节点之间获得多个边。 我只想要一个带有特定顶点的边。

【问题讨论】:

    标签: java titan gremlin


    【解决方案1】:

    查看Between Vertices 配方并从那里扩展。例如,假设您想在 id 为 1 和 2 的两个顶点之间找到边。让我们进一步假设您只想“知道”具有大于 0.0 的“权重”属性的边。

    gremlin> graph = TinkerFactory.createModern()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> g = graph.traversal()
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
    gremlin> g.V(1).bothE().where(otherV().hasId(2)).hasLabel('knows').has('weight',gt(0.0))
    ==>e[7][1-knows->2]
    gremlin> g.V(1,2).bothE().where(inV().has(id, within(2,3))).hasLabel('created')
    ==>e[9][1-created->3]
    gremlin> vStarts = g.V(1,2).toList().toArray()
    ==>v[1]
    ==>v[2]
    gremlin> vEnds = g.V(2,3).toList().toArray()
    ==>v[2]
    ==>v[3]
    gremlin> g.V(vStarts).bothE().where(inV().is(within(vEnds))).hasLabel('created')
    ==>e[9][1-created->3]
    

    【讨论】:

    • 这样的事情可能吗:? ArrayList nodeStartList = getVertexList(relationshipStorage.getStartNode(), g); ArrayList nodeEndList = getVertexList(relationshipStorage.getEndNode(), g); GraphTraversal tempOutput = g.V(nodeStartList).bothE().where(g.V(nodeEndList)).hasLabel(relationshipStorage.getId());
    • 当然——配方中有一个模型。稍微更新了答案...
    • 非常感谢,如何在 java 中获取 inV 和 inside?​​span>
    • 尽管我在基于 groovy 的 gremlin 控制台中执行了这些都是 java 兼容的语句。为方便起见,控制台静态导入__ 类的方法,它为您提供inV()(匿名遍历)。它静态地导入枚举P 的字段,从而为您提供within。请参阅这些文档以获取更多信息:tinkerpop.apache.org/docs/current/tutorials/the-gremlin-console/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2022-12-08
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多