Gremlin路径属性添加疑问:如何为路径附加frequency属性?
解决方案:给Gremlin路径添加frequency属性
完全可以用Gremlin实现,不需要依赖Java代码。针对你得到的node1-edge1-node2-edge2-node3结构路径,以下是两种可行的实现方式:
方式一:构造包含路径与属性的结果(推荐)
这种方式通过project()步骤将路径和目标属性封装成Map,既保留完整路径结构,又能直接拿到frequency值,兼容性最强:
g.E().has('length', gt(1)).as('edge1') .outV().as('node1') .select('edge1').inV().as('node2') .outE().as('edge2').where(eq('edge1')).by('id') .inV().as('node3') .project('path', 'frequency') .by(path().by().by()) // 保留路径中节点和边的原始对象,若需ID可改为by('id') .by(select('edge1').values('frequency'))
方式二:为临时路径对象添加属性(需图数据库支持)
部分图数据库(如JanusGraph)支持为遍历生成的临时路径对象添加属性,直接修改路径本身:
g.E().has('length', gt(1)).as('edge1') .outV().as('node1') .select('edge1').inV().as('node2') .outE().as('edge2').where(eq('edge1')).by('id') .inV().as('node3') .path() .property('frequency', select('edge1').values('frequency'))
注意:这种方式的兼容性取决于你使用的图数据库,若数据库不支持临时路径的属性修改,优先选用第一种方式。
优化你原有的遍历写法
你原代码中where('edge1', eq('edge2').by('id'))可以简化为where(eq('edge1')).by('id'),语法更简洁规范。
内容的提问来源于stack exchange,提问作者Z Yk
相关产品推荐
相关产品推荐

