我有一个看起来像这样的数据集:
V1 = name:"some name1"
V2 = name:"some name2"
V3 = name:"some name3"
V4 = name:"some name4"
E1 = weight:0.2, StartVertex:V1, EndVertex:V2
E2 = weight:0.3, StartVertex:V1, EndVertex:V3
E3 = weight:0.4, StartVertex:V1, EndVertex:V4
E4 = weight:0.5, StartVertex:V2, EndVertex:V1
E5 = weight:0.6, StartVertex:V2, EndVertex:V3
...
我有一个 gremlin 查询,可以找到这些顶点之间的一些路径。
我想在那里做两件事。
1:我希望能够找到路径中所有权重的乘积(path_edge1.weight * path_edge2.weight * ...)
2:我希望能够根据末端顶点对每条路径的结果求和。
我想要实现的伪代码:
g.V().has('name',REGEX,\".+some_query.+\").inE.outV.inE.FindingAPathSomehow.path{path_score = 1 : foreach edge e: path_score = path_score * e.weight}{it.lastV().id}.sumWhereIdIsEqual(it[1])
希望这有点可以理解。
因为我使用的是 RexPro,所以我希望能够在纯 gremlin/groovy 脚本中完成所有操作。
我已经四处寻找答案,但还没有找到一种方法来做到这一点。
如果上述内容不清楚,请进一步解释:
查询时,我正在寻找子字符串等于“some_query”的顶点。这会给我一组起始顶点。
有了这些顶点,我正在我的图中寻找一个特定的路径,它将给我几个可能看起来像这样的路径:
V = Vertex
E = Edge
Path1 = V3 - E2 - V1
Path2 = V4 - E5 - V7 - E1 - V1
这些边中的每一个都具有权重属性。有了这个,我想得到所谓的“Big Pi”或“Capital Pi”,它是一个序列的产物。考虑求和(Σ),但用乘法而不是加法。
结果Path1
将是 E2 的权重,或者0.3
在上面的示例中。而在上面的例子中,它Path2
的权重是.E5.weight * E1.weight
0.6 * 0.2 = 0.12
在这种情况下,我们从顶点V3
和开始V4
,并且都在 结束V1
。在这种情况下,我想对 和 的权重求和Path1
,Path2
因为两个末端顶点都是V1
。这将给出总分V1
as 0.3 + 0.12 = 0.42
。如果有一个Path3
with end VertexV2
和 score 0.34
,那么结果列表将必须包含其中的元素;{[V1, 0.42], [V2,0.34] }
.