java - 删除泰坦图中的后代

标签 java graph-databases titan

我想沿着给定的边关系删除一组顶点及其所有后代。就我而言,该图有一些类型为 session 的顶点,以及其他类型为事件的顶点。从事件到 session 存在带有标签 in_session 的弧。

似乎没有快速的方法可以一次性完成此操作。这是我使用的代码:

// First, select all event descendants of sessions with r < 700
GraphTraversal<Vertex, Vertex> t = g.V()
    .has("type", "session")
    .has("r", P.lt(700))
    .in("in_session");

// And remove those events
while (t.hasNext())
    t.next().remove();

// Then, using the first part of the query again, 
// select the same sessions as before
t = g.V().has("type", "session").has("r", P.lt(700));

// And delete them as well
while (t.hasNext())
    t.next().remove();

对我来说这似乎很笨重。此外,如果我想删除较低级别的后代,我必须编写更多重复的步骤(一直到底部,然后删除,然后备份一级,然后删除,然后再次备份一级,依此类推。 ..)。我还注意到 TitanGraph 中没有removeVertex 方法。

最佳答案

一种方法是使用 sideEffect()。假设我想从 TinkerPop toy 中的“marko”顶点中删除所有“知道”顶点“现代”图:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has('name','marko').outE()
==>e[9][1-created->3]
==>e[7][1-knows->2]
==>e[8][1-knows->4]
gremlin> g.V().has('name','marko').sideEffect(out('knows').drop()).drop()
gremlin> g.V().has('name','marko')
gremlin> g.V(2)
gremlin> g.V(4)
gremlin> g.V(3)
==>v[3]

请注意使用 drop(),而不是迭代遍历以在每个元素上调用 remove()

关于java - 删除泰坦图中的后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39142336/

相关文章:

java - 如何将字符串与字符序列交错

java - Egit 使 Luna 非常慢,性能问题

java - SSO 身份验证,响应始终为 NTLM

具有前端和高级功能的图形数据库

cassandra - 如何使用Cassandra存储后端删除Titan中的图形?

java - Gremlin 通过 java 读取外部 JSON 顶点并添加到现有开放图给出了 Invalid vertexprovided 异常?

java - KeyListener编译问题中的doClick()

scala - 是否可以为顶点中的标签建立索引

graph-databases - Titan 和 Spark-GraphX 之间有什么区别,哪一个是首选?

titan - 如何在两个当前连接的顶点之间插入一个顶点?