为什么 tinkerpop gremlin 查询中没有返回元素?
Why isn't a element returned in tinkerpop gremlin query?
为什么在 tinkerpop gremlin 查询中没有返回元素 7?
我有一个连接节点和具有状态字段的边的图。
状态是
- 0 = 未知
- 1 = 已批准
- 2 = 拒绝
在我的查询中,我想获取所有连接的节点
- 仅由批准的边连接
- 由一个被拒绝的边连接到它自己或任何被批准的边
- 连接到仅被批准的边缘之一拒绝
这是我样本中的节点和边:
红色边缘被否认(2),虚线未知(0)。
下面是在 gremlin 控制台中创建此图的脚本。
以下查询适用于节点 0
:
g.V().
has('name', eq('0')).
as('l1').
repeat(__.
outE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
optional(__.
as('l2').
union(
__.identity(),
__.select('l1')
).
outE().
has('State', 2).
otherV().
optional(__.
as('l3').
repeat(__.
bothE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
union(
__.identity(),
__.select('l3')
)
).
union(
__.identity(),
__.select('l2')
)
).
dedup().
properties('name')
它给了我节点 7
, 1
, 3
, 4
, 5
, 2
.
但是当我从节点 1 开始时,它只给我 3
、0
、2
、4
、5
。我不明白为什么缺少 7
。 (与上面的查询相同,但在第 2 行中使用了另一个名称)
g.V().
has('name', eq('1')).
as('l1').
repeat(__.
outE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
optional(__.
as('l2').
union(
__.identity(),
__.select('l1')
).
outE().
has('State', 2).
otherV().
optional(__.
as('l3').
repeat(__.
bothE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
union(
__.identity(),
__.select('l3')
)
).
union(
__.identity(),
__.select('l2')
)
).
dedup().
properties('name')
这里是在 gremlin 控制台中创建图形的脚本
graph = TinkerGraph.open()
g = traversal().withEmbedded(graph)
g.addV('InquiryEntity').property(single, 'name', '0')
g.addV('InquiryEntity').property(single, 'name', '1')
g.addV('InquiryEntity').property(single, 'name', '2')
g.addV('InquiryEntity').property(single, 'name', '3')
g.addV('InquiryEntity').property(single, 'name', '4')
g.addV('InquiryEntity').property(single, 'name', '5')
g.addV('InquiryEntity').property(single, 'name', '6')
g.addV('InquiryEntity').property(single, 'name', '7')
g.addV('InquiryEntity').property(single, 'name', '8')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '1').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '2').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '3').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '4').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '2').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '3').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '4').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '3').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '4').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '4').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '4').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '4').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '4').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '4').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '5').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '5').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '5').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '6').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '6').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '7').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', eq('0').or(eq('1'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('1').or(eq('0')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('1').or(eq('2'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('2').or(eq('1')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('1').or(eq('3'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('3').or(eq('1')))).property('State', 2)
g.V().hasLabel('InquiryEntity').has('name', eq('0').or(eq('4'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('0').or(eq('4')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('4').or(eq('5'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('4').or(eq('5')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('0').or(eq('5'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('0').or(eq('5')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('3').or(eq('7'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('3').or(eq('7')))).property('State', 1)
您需要将 emit
移动到 repeat
之前,否则节点“1”将不会成为起始集合的一部分,而到达“7”的唯一途径是通过“1” ”。这当然意味着起始顶点包含在结果中。要从结果中删除起始顶点,您可以在查询末尾的 dedup
之后添加 where(neq('l1'))
。
gremlin> g.V().
......1> has('name', '1').
......2> as('l1').
......3> emit().
......4> repeat(__.
......5> outE().
......6> has('State', 1).
......7> otherV().
......8> simplePath()
......9> ).
.....10> dedup().
.....11> optional(__.
.....12> as('l2').
.....13> union(
.....14> __.identity(),
.....15> __.select('l1')
.....16> ).
.....17> outE().
.....18> has('State', 2).
.....19> otherV().
.....20> optional(__.
.....21> as('l3').
.....22> repeat(__.
.....23> bothE().
.....24> has('State', 1).
.....25> otherV().
.....26> simplePath()
.....27> ).
.....28> emit().
.....29> dedup().
.....30> union(
.....31> __.identity(),
.....32> __.select('l3')
.....33> )
.....34> ).
.....35> union(
.....36> __.identity(),
.....37> __.select('l2')
.....38> )
.....39> ).
.....40> dedup().
.....41> properties('name')
==>vp[name->7]
==>vp[name->1]
==>vp[name->3]
==>vp[name->0]
==>vp[name->2]
==>vp[name->5]
==>vp[name->4]
我通过在 simplepath() 之后添加 from 找到了解决方案
您可以在两个语句上添加 .from('l3') ,这将使路径从那里开始。否则简单路径将始终从头开始。
g.V().
has('name', eq('1')).
as('l1').
repeat(__.
outE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
optional(__.
as('l2').
union(
__.identity(),
__.select('l1')
).
outE().
has('State', 2).
otherV().
optional(__.
as('l3').
repeat(__.
bothE().
has('State', 1).
otherV().
simplePath().from('l3')
).
emit().
dedup().
union(
__.identity(),
__.select('l3')
)
).
union(
__.identity(),
__.select('l2')
)
).
dedup().
properties('name')
==>vp[name->7]
==>vp[name->0]
==>vp[name->3]
==>vp[name->2]
==>vp[name->4]
==>vp[name->5]
为什么在 tinkerpop gremlin 查询中没有返回元素 7?
我有一个连接节点和具有状态字段的边的图。
状态是
- 0 = 未知
- 1 = 已批准
- 2 = 拒绝
在我的查询中,我想获取所有连接的节点
- 仅由批准的边连接
- 由一个被拒绝的边连接到它自己或任何被批准的边
- 连接到仅被批准的边缘之一拒绝
这是我样本中的节点和边:
红色边缘被否认(2),虚线未知(0)。
下面是在 gremlin 控制台中创建此图的脚本。
以下查询适用于节点 0
:
g.V().
has('name', eq('0')).
as('l1').
repeat(__.
outE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
optional(__.
as('l2').
union(
__.identity(),
__.select('l1')
).
outE().
has('State', 2).
otherV().
optional(__.
as('l3').
repeat(__.
bothE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
union(
__.identity(),
__.select('l3')
)
).
union(
__.identity(),
__.select('l2')
)
).
dedup().
properties('name')
它给了我节点 7
, 1
, 3
, 4
, 5
, 2
.
但是当我从节点 1 开始时,它只给我 3
、0
、2
、4
、5
。我不明白为什么缺少 7
。 (与上面的查询相同,但在第 2 行中使用了另一个名称)
g.V().
has('name', eq('1')).
as('l1').
repeat(__.
outE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
optional(__.
as('l2').
union(
__.identity(),
__.select('l1')
).
outE().
has('State', 2).
otherV().
optional(__.
as('l3').
repeat(__.
bothE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
union(
__.identity(),
__.select('l3')
)
).
union(
__.identity(),
__.select('l2')
)
).
dedup().
properties('name')
这里是在 gremlin 控制台中创建图形的脚本
graph = TinkerGraph.open()
g = traversal().withEmbedded(graph)
g.addV('InquiryEntity').property(single, 'name', '0')
g.addV('InquiryEntity').property(single, 'name', '1')
g.addV('InquiryEntity').property(single, 'name', '2')
g.addV('InquiryEntity').property(single, 'name', '3')
g.addV('InquiryEntity').property(single, 'name', '4')
g.addV('InquiryEntity').property(single, 'name', '5')
g.addV('InquiryEntity').property(single, 'name', '6')
g.addV('InquiryEntity').property(single, 'name', '7')
g.addV('InquiryEntity').property(single, 'name', '8')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '1').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '2').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '3').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '4').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '0').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '2').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '3').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '4').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '1').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '3').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '4').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '2').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '4').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '3').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '4').as('l1').V().hasLabel('InquiryEntity').has('name', '5').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '4').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '4').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '4').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '5').as('l1').V().hasLabel('InquiryEntity').has('name', '6').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '5').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '5').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '6').as('l1').V().hasLabel('InquiryEntity').has('name', '7').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '6').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', '7').as('l1').V().hasLabel('InquiryEntity').has('name', '8').addE('CompareEntity').property('State', 0).to('l1').outV().addE('CompareEntity').property('State', 0).from('l1')
g.V().hasLabel('InquiryEntity').has('name', eq('0').or(eq('1'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('1').or(eq('0')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('1').or(eq('2'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('2').or(eq('1')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('1').or(eq('3'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('3').or(eq('1')))).property('State', 2)
g.V().hasLabel('InquiryEntity').has('name', eq('0').or(eq('4'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('0').or(eq('4')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('4').or(eq('5'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('4').or(eq('5')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('0').or(eq('5'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('0').or(eq('5')))).property('State', 1)
g.V().hasLabel('InquiryEntity').has('name', eq('3').or(eq('7'))).outE('CompareEntity').where(__.otherV().hasLabel('InquiryEntity').has('name', eq('3').or(eq('7')))).property('State', 1)
您需要将 emit
移动到 repeat
之前,否则节点“1”将不会成为起始集合的一部分,而到达“7”的唯一途径是通过“1” ”。这当然意味着起始顶点包含在结果中。要从结果中删除起始顶点,您可以在查询末尾的 dedup
之后添加 where(neq('l1'))
。
gremlin> g.V().
......1> has('name', '1').
......2> as('l1').
......3> emit().
......4> repeat(__.
......5> outE().
......6> has('State', 1).
......7> otherV().
......8> simplePath()
......9> ).
.....10> dedup().
.....11> optional(__.
.....12> as('l2').
.....13> union(
.....14> __.identity(),
.....15> __.select('l1')
.....16> ).
.....17> outE().
.....18> has('State', 2).
.....19> otherV().
.....20> optional(__.
.....21> as('l3').
.....22> repeat(__.
.....23> bothE().
.....24> has('State', 1).
.....25> otherV().
.....26> simplePath()
.....27> ).
.....28> emit().
.....29> dedup().
.....30> union(
.....31> __.identity(),
.....32> __.select('l3')
.....33> )
.....34> ).
.....35> union(
.....36> __.identity(),
.....37> __.select('l2')
.....38> )
.....39> ).
.....40> dedup().
.....41> properties('name')
==>vp[name->7]
==>vp[name->1]
==>vp[name->3]
==>vp[name->0]
==>vp[name->2]
==>vp[name->5]
==>vp[name->4]
我通过在 simplepath() 之后添加 from 找到了解决方案 您可以在两个语句上添加 .from('l3') ,这将使路径从那里开始。否则简单路径将始终从头开始。
g.V().
has('name', eq('1')).
as('l1').
repeat(__.
outE().
has('State', 1).
otherV().
simplePath()
).
emit().
dedup().
optional(__.
as('l2').
union(
__.identity(),
__.select('l1')
).
outE().
has('State', 2).
otherV().
optional(__.
as('l3').
repeat(__.
bothE().
has('State', 1).
otherV().
simplePath().from('l3')
).
emit().
dedup().
union(
__.identity(),
__.select('l3')
)
).
union(
__.identity(),
__.select('l2')
)
).
dedup().
properties('name')
==>vp[name->7]
==>vp[name->0]
==>vp[name->3]
==>vp[name->2]
==>vp[name->4]
==>vp[name->5]