次のようなデータセットがあります。
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
...
これらの頂点間のいくつかのパスを見つけるグレムリン クエリがあります。
そこでやりたいことが2つあります。
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
WhilePath2
の重みはになります。E5.weight * E1.weight
0.6 * 0.2 = 0.12
この場合、頂点V3
とから開始しV4
、両方とも で終了しV1
ます。この場合、両端の頂点が であるため、Path1
との重みを合計したいと思います。これにより、 の合計スコアが得られます。end Vertexと scoreを持つがあった場合、結果のリストはその中の要素でなければなりません。.Path2
V1
V1
0.3 + 0.12 = 0.42
Path3
V2
0.34
{[V1, 0.42], [V2,0.34] }