当前位置: 首页 > 知识库问答 >
问题:

使用前一条边属性值过滤后一条边的小精灵图遍历

胡禄
2023-03-14

在图遍历中,我只想考虑具有与在遍历的前一步中访问的一条边的属性相等的属性的边。

我找到了http://tinkerpop.apache.org/docs/current/recipes/#traversal-induced-values但这似乎只适用于单个对象,在我的例子中,我需要在遍历时更改值。例如,从具有出站边(E1、E2、E3...)的V1开始,我想遍历E1到V2,然后沿着V2的任何边遍历,其中edge.property(x)==E1.property(x),并对V1(E2、E3、...)

我找不到任何支持在Gremlin中执行此操作的文档,可以吗?

共有1个答案

苏边浩
2023-03-14

我们可以使用TinkerPop附带的现代玩具图:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]

该图已包含6条边,其中两条边的权重为1.0:

gremlin> g.E().valueMap()
==>[weight:0.5]
==>[weight:1.0]
==>[weight:0.4]
==>[weight:1.0]
==>[weight:0.4]
==>[weight:0.2]

我们使用这两条边中权重为1.0的一条来获得另一条权重相同的边。通过遍历这两条边中的第一条,我们到达一个具有两条出站边的顶点:

gremlin> g.V(1).outE().has('weight',1.0).inV().outE()
==>e[10][4-created->5]
==>e[11][4-created->3]
gremlin> g.V(1).outE().has('weight',1.0).inV().outE().valueMap()
==>[weight:1.0]
==>[weight:0.4]

其中一条边是另一条权重为1.0的边。因此,我们只需根据第一条边的权重过滤这些边:

gremlin> g.V(1).outE().has('weight',1.0).
                as('firstEdge'). // save the first edge
                inV().outE().
                where(eq('firstEdge')). // compare with the first edge
                by('weight') // use only the 'weight' property for the equality check
==>e[10][4-created->5]
 类似资料:
  • 我试图从给定的根节点开始遍历图的所有节点。在遍历时,我想“修复”从上一个顶点到当前顶点的边,使边从上一个顶点到当前顶点(可能是另一种方式,但结束图应该是根顶点位于根的树)。 问题似乎是被遍历的边并不是全部严格地在边外或边内。 我试图创建一个广度优先遍历(我不应该先做广度吗?),但由于有输入和输出边,我开始的查询看起来像这样 由于“.both”(我认为),这似乎正在创建一个无限循环。 有没有办法在g

  • 我有一个带有两个顶点的简单图,具有id'a'和'b'。 我已将两条边从“a”分配到“b”,其中每条边都有标签=“foo” [1] 小精灵 == == 每条边都有一个属性key=“已提交”。 [2] 小精灵 == == 我的问题:我想像步骤[2]一样枚举边缘并返回它们各自的属性,但是如何将结果中的边缘属性匹配回它们各自的边缘(id)?我得到的只是属性键值分配;没有与边缘id相关的内容。 谢谢 乔尔·

  • 我对Gremlin还比较陌生,我所在的公司正在寻求实现一个带有一些临时边缘的图形数据库。每个顶点可以有一条或多条边,每条边上都有一个本质上是即时真/假的属性。 当遍历图时,如果“isTemporary”=true,我们应该遵循该边,否则我们应该遵循“isTemporary”=false的边。 即。,

  • 多边形精灵(Polygon Sprite) 也是一个精灵,同样是为了展示一个可以被控制的图像,但是和普通精灵的区别是,普通精灵在绘图处理中被分为了两个三角形,多边形精灵则是被分为了一系列三角形。 为什么要使用多边形精灵 提高性能! 要深入分析这个是如何提高性能的,会需要很多和像素填充率有关的技术术语。幸好本节是入门性质的文档,能让大家理解多边形精灵比普通精灵性能好就可以了,不用讨论特定宽高矩形绘制

  • 我的图包含一些“个人”节点,这些节点“参与”了一些“对话”节点。我想编写一个小精灵查询,它将直接在“Person”节点之间创建“TalksWith”边缘。该边缘应包含一个属性“countConversations”,显示这两个人参与了多少对话。 这是否可能同时对所有“Person”节点使用一个小精灵查询? 这是我的图形设置(使用Gremlin控制台): 我想做的是创建这样的“TalkedWith”

  • 我有一个顶点ID列表。我想在它们之间找到所有可能的边缘。 我理解filter/where等方法在这里会有所帮助,但由于我使用的是gremlin-python,它们的实现必须有所不同。 我尝试过: 我怎样才能做到这一点?这似乎是一个容易的问题,但我仍然坚持下去。