【问题标题】:Filter nodes by source Node gremlin按源节点 gremlin 过滤节点
【发布时间】:2018-02-17 07:23:52
【问题描述】:

假设我有这样的数据。

(id:1)->(id:2)->(id:3)->(id:4)->(id:5)->(id:6)->(id:9)->(id:10)
(id:5)->(id:7)->(id:8)->(id:6)

需要明确的是,Id 5 是具有 2 条边的同一节点。

这是一个代码示例:

g.addV('person').property('id',1).as('1').
  addV('person').property('id',2).as('2').
  addV('person').property('id',3).as('3').
  addV('person').property('id',4).as('4').
  addV('person').property('id',5).as('5').
  addV('person').property('id',6).as('6').
  addV('person').property('id',7).as('7').
  addV('person').property('id',8).as('8').
  addV('person').property('id',9).as('9').
  addV('person').property('id',10).as('10').
  addE('connection').from('1').to('2').
  addE('connection').from('2').to('3').
  addE('connection').from('3').to('4').
  addE('connection').from('4').to('5').
  addE('connection').from('5').to('6').
  addE('connection').from('6').to('9').
  addE('connection').from('9').to('10').
  addE('connection').from('5').to('7').
  addE('connection').from('7').to('8').
  addE('connection').from('8').to('6').iterate()

我需要遍历图,并排除任何与 6 有连接的节点,在任何方向上,到 5。所以我会回来:

(id:1)->(id:2)->(id:3)->(id:4)->(id:5)->(id:6)
(id:1)->(id:2)->(id:3)->(id:4)->(id:5)->(id:7)->(id:8)->(id:6)

【问题讨论】:

  • 建议您将示例数据编写为可以在 Gremlin 控制台中运行的 gremlin 脚本,而不是以这种方式呈现图形数据。以这种方式更容易传达您的示例,并节省可能回答该额外任务的人,使他们能够专注于您的解决方案。

标签: gremlin tinkerpop janusgraph


【解决方案1】:

我不确定我是否完全理解您的问题,但听起来您想在看到遇到顶点 6​​ 并且顶点 6 与顶点 5 有边的模式后立即停止遍历 - 如果是这样,那么这里是一种方法:

gremlin> g.V().has('id',1).
......1>   repeat(both().simplePath()).
......2>     until(and(has('id',6),
......3>               both().has('id',5))).
......4>   path().by('id')
==>[1,2,3,4,5,6]
==>[1,2,3,4,5,7,8,6]

请注意,由于遍历从顶点 1 开始,因此我与您在答案中描述的输出不完全匹配,因此在这两种情况下,所采用的路径都将包括该部分路径。

【讨论】:

  • 当我修改查询以使用我的实际数据时,它给了我这个The repeat()-traversal was not defined: RepeatStep(until([AndStep([[HasStep([id.eq(6)]), VertexStep(BOTH,vertex), HasStep([G3E_FNO.eq(5)])]])]),emit(false))
  • 您的 repeat() 定义中一定有语法错误。也许是一些不好的括号?
  • 你是对的,虽然现在它什么也没有返回。如果我比较的是字符串而不是数字,这有关系吗?
  • 如果存储在数据库中的值是字符串,那么您需要在遍历中使用字符串作为参数。
猜你喜欢
  • 2017-10-05
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多