gremlin - Gremlin - 用有意义的信息显示最短(最低成本)的路径
问题描述
我试图让 Gremlin 向我展示具有有意义信息的最短路径(关于成本,而不是经过的顶点数)。[Gremlin's Recipes] http://tinkerpop.apache.org/docs/3.2.1-SNAPSHOT/recipes/#shortest-path中有一个类似的例子,关于如何从一个顶点获取所有路径及其各自的成本到另一个,但我找不到让 Gremlin 显示有意义的信息的方法,比如顶点的名称或年龄以及边的权重。例如,不能v[1}
从下面的结果中知道谁是谁。
gremlin> g.V(1).repeat(outE().inV().simplePath()).until(hasId(5)).
path().as('p').
map(unfold().coalesce(values('weight'),
constant(0.0)).sum()).as('cost').
select('cost','p') //(4)
==>[cost:3.00, p:[v[1], e[0][1-knows->2], v[2], e[1][2-knows->4], v[4], e[2][4-knows->5], v[5]]]
==>[cost:2.00, p:[v[1], e[0][1-knows->2], v[2], e[3][2-knows->3], v[3], e[4][3-knows->4], v[4], e[2][4-knows->5], v[5]]]
我知道 Gremlin 支持一个 by()-step 调制器来完成这样的任务:
gremlin> g.V().out().out().path().by('name').by('age')
==>[marko,32,ripple]
==>[marko,32,lop]
,但我不知道如何结合这两种解决方案。理想情况下,我正在寻找的结果应该是这样的:
==>[duration:2, path:[Chicago, supertrain, New York]]
有什么建议么?提前谢谢了!
解决方案
您可以在步骤之后添加by
调制器path
,并将其更改values
为select
:
g.V().hasLabel('A').repeat(outE().inV().
simplePath()).
until(hasLabel('C')).path().
by(valueMap().with(WithOptions.tokens)).as('p').
map(unfold().
coalesce(
select('distance'),
constant(0.0)
).sum()).
as('cost').
select('cost', 'p')
推荐阅读
- reactjs - Firebase 和 React Hooks (useState & useEffect)
- javascript - json_encode 用于多行字符串 php 到 javascript
- excel - 表格自动填充不适用于 Excel 数据,
- security - 我是否必须保护已经受权限保护的请求?
- python - 从python中的另一个文件调用函数
- ios - 尽管实现了 UICollectionViewDelegate 协议,但无法覆盖 UICollectionView 的 willDisplayCell forItemAt 方法
- java - 返回具有不同 Http 状态的 Rest CompletableFuture
- asp.net - Asp.net MVC5 如何缩短项目的 URL,以便它使用更少的数据库空间。我收到以下错误
- python - 正则表达式匹配任何两个字符,其中两个字符以反斜杠和空格开头
- button - 使用 Kotlin 更改片段中的按钮背景