graph-databases - 如何使用 Gremlin 选择可选的图结构?

标签 graph-databases gremlin titan

我正在使用 Gremlin 查询存储在 TitanDB 中的图形。

该图包含具有属性(例如“描述”)的用户顶点,以及表示用户之间关系的边。

我想使用 Gremlin 来获取 1) 按属性的用户和 2) 与其他用户的可能关系。例如,我可以使用以下查询来获取其描述中包含“开发者”一词的所有用户以及来自或针对这些用户的标签为“关系”的边:

g.V('description',CONTAINS,'developer').as('user').bothE.as('relationship').select

到目前为止,还不错。然而,问题是一些用户(还)没有任何关系。上面的查询将忽略这些用户(尽管他们的描述包含“开发者”)并且只会返回至少有一种关系的用户。

有没有办法选择描述中包含“开发者”的所有用户,如果存在,还可以选择他们的关系?

最佳答案

你可以这样做:

g.V('description',CONTAINS,'developer').as('user').transform{it.bothE.toList()}.as('relationship').select

这样,对于那些没有边的开发者,你应该得到一个空列表。

在 TinkerPop 3.x 中,使用 TinkerPop 现代图形,我在其中删除了 id 为 12 的边,你会这样做:

gremlin> g.E(12).drop()
gremlin> g.V().hasLabel('person').as('u').
......1>       map(bothE().fold()).as('r').
......2>       select('u','r')
==>[u:v[1],r:[e[9][1-created->3],e[7][1-knows->2],e[8][1-knows->4]]]
==>[u:v[2],r:[e[7][1-knows->2]]]
==>[u:v[4],r:[e[10][4-created->5],e[11][4-created->3],e[8][1-knows->4]]]
==>[u:v[6],r:[]]

关于graph-databases - 如何使用 Gremlin 选择可选的图结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27704043/

相关文章:

java - 我如何在 Neo4j 中创建这个索引?

cassandra - Gremlin 服务器 Cassandra

solr - 匹配Titan索引的elasticsearch数据

neo4j - 如何在 neo4j 中添加双向关系属性的值集合?

database-design - 如何为图数据库建模?

groovy - 将数据加载到 Titan 时如何调试 gremlin groovy 脚本

gremlin - 在 gremlin 中查找重复项

java - 如何在 TinkerPop 中比较顶点集是否相等?

titan - 如何去除两个顶点之间的边?

neo4j - 这个查询在 neo4j/gremlin 中可行吗?