【问题标题】:What is the right way to find an edge between two vertices?在两个顶点之间找到边的正确方法是什么?
【发布时间】:2013-04-25 23:56:24
【问题描述】:

使用 tinkerpop blueprints API,找出两个顶点之间是否存在边的最佳方法是什么?我想避免vertex.getEdges() 并迭代直到找到正确的。

例如:检查 v1 是否是 v2 的朋友

Vertex v1 = g.addVertex(null);
Vertex v2 = g.addVertex(null);
Edge edge = g.addEdge(null, v1, v2, "friends");
Edge edge = g.addEdge(null, v1, v2, "follows");

// Node with lots of edges - Supernode - problem?
List<Edge> edges = new ArrayList<Edge>();
for(Edge edge : g.getVertex(v1.getId()).getEdges(Direction.OUT, "friends")){
   if(edge.getVertex(Direction.IN).getId().equals(v2.getId()){
      edges.add(edge);
  }
}

我应该使用Vertex Query吗?


通过 gremlin 我可以做到:

g.v(v1.getID()).outE("friends").inV.filter{it.id == v2.getID}

Neo4j way:

IndexHits<Relationship> relationships = relationshipIndex().get("type", edgeType, node1, node2);

感谢您的帮助! 我还是新手。

【问题讨论】:

  • 看来您可以使用核心 API 获取它。为什么在这种情况下使用蓝图 API 的“开销”?
  • 核心 API 可以用 Neo4j,但以 Titan 为例,我需要直接使用蓝图
  • 我认为你是在正确的轨道上。如果可能,请使用顶点查询和以顶点为中心的索引来缩短查询时间。 github.com/thinkaurelius/titan/wiki/Vertex-Centric-Indices
  • 我也在寻找类似graphContext.testIncidence(projectVertex(), archiveVertex, "uses");

标签: graph neo4j graph-databases titan tinkerpop


【解决方案1】:
g.V(v1).bothE("edge_label").where(otherV().is(v2)

【讨论】:

    【解决方案2】:

    Huangmao Quan 的答案中使用的back 步骤在 Tinkerpop 中不再可用。正如我已经回答过question 一样,以下请求可能适用于 tinkerpop 堆栈的更新版本。

    g.V().has('propertykey','value1').outE('thatlabel').as('e').inV().has('propertykey','value2').select('e')
    

    【讨论】:

      【解决方案3】:
      gremlin> g.v(1).bothE.as('x').bothV.retain([g.v(3)]).back('x')
      

      【讨论】:

        【解决方案4】:

        试试这个:

        if (g.v(1).out('follows').retain([g.v(2)]).hasNext())
        {
            println('v(1) follows v(2)')
        }
        

        注意:此处的边是单向的,即您无法推断 v2 是否跟随 v1。

        来源https://groups.google.com/forum/#!msg/gremlin-users/Og7Xf8tYbx4/gqBArTw98sAJ

        【讨论】:

          猜你喜欢
          • 2016-06-26
          • 1970-01-01
          • 1970-01-01
          • 2012-10-09
          • 2019-01-15
          • 1970-01-01
          • 2023-03-12
          • 2014-09-15
          • 2010-09-23
          相关资源
          最近更新 更多