Gremlin 3.2.4 上的 Gremlin 数学步骤替代方案
Gremlin math step alternative on Gremlin 3.2.4
版本 3.3.1 中添加了数学函数 (http://tinkerpop.apache.org/docs/3.3.9-SNAPSHOT/upgrade/#_added_code_math_code_step_for_scientific_traversal_computing)
但是我用https://github.com/microsoft/spring-data-gremlin。并且支持3.2.4
版本
有没有办法在 gremlin 3.2.4 上使用数学函数?
GraphTraversal t = graph.V().hasLabel("App").as("a")
.inE("RANKS").as("r")
.outV().as("k")
.choose(__.select("k").by("countryCode").is(__.in(...)),
__.math("1.0 / r").by("rank1"),
__.math("1.0 / r").by("rank2"))
.as("score")
...;
在这种情况下,您或许可以使用 sack()
:
gremlin> g.addV('App').as('a').
......1> addV().property('countryCode','US').as('p1').
......2> addV().property('countryCode','CA').as('p2').
......3> addE('RANKS').property('rank1',5).property('rank2',10).from('p1').to('a').
......4> addE('RANKS').property('rank1',3).property('rank2',6).from('p2').to('a').iterate()
gremlin> g.V().hasLabel("App").as("a").
......1> inE("RANKS").as("r").sack(assign).by(constant(1.0)).
......2> outV().as("k").
......3> choose(__.select("k").by("countryCode").is(within('US')),
......4> select('r').sack(div).by("rank1"),
......5> select('r').sack(div).by("rank2")).
......6> sack().as("score").
......7> select('a','r','k','score')
==>[a:v[0],r:e[5][1-RANKS->0],k:v[1],score:0.2]
==>[a:v[0],r:e[6][3-RANKS->0],k:v[3],score:0.1666666667]
版本 3.3.1 中添加了数学函数 (http://tinkerpop.apache.org/docs/3.3.9-SNAPSHOT/upgrade/#_added_code_math_code_step_for_scientific_traversal_computing)
但是我用https://github.com/microsoft/spring-data-gremlin。并且支持3.2.4
版本有没有办法在 gremlin 3.2.4 上使用数学函数?
GraphTraversal t = graph.V().hasLabel("App").as("a")
.inE("RANKS").as("r")
.outV().as("k")
.choose(__.select("k").by("countryCode").is(__.in(...)),
__.math("1.0 / r").by("rank1"),
__.math("1.0 / r").by("rank2"))
.as("score")
...;
在这种情况下,您或许可以使用 sack()
:
gremlin> g.addV('App').as('a').
......1> addV().property('countryCode','US').as('p1').
......2> addV().property('countryCode','CA').as('p2').
......3> addE('RANKS').property('rank1',5).property('rank2',10).from('p1').to('a').
......4> addE('RANKS').property('rank1',3).property('rank2',6).from('p2').to('a').iterate()
gremlin> g.V().hasLabel("App").as("a").
......1> inE("RANKS").as("r").sack(assign).by(constant(1.0)).
......2> outV().as("k").
......3> choose(__.select("k").by("countryCode").is(within('US')),
......4> select('r').sack(div).by("rank1"),
......5> select('r').sack(div).by("rank2")).
......6> sack().as("score").
......7> select('a','r','k','score')
==>[a:v[0],r:e[5][1-RANKS->0],k:v[1],score:0.2]
==>[a:v[0],r:e[6][3-RANKS->0],k:v[3],score:0.1666666667]