[ 
https://issues.apache.org/jira/browse/TINKERPOP-1990?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16566625#comment-16566625
 ] 

ASF GitHub Bot commented on TINKERPOP-1990:
-------------------------------------------

Github user spmallette commented on a diff in the pull request:

    https://github.com/apache/tinkerpop/pull/882#discussion_r207183855
  
    --- Diff: docs/src/recipes/shortest-path.asciidoc ---
    @@ -136,3 +158,44 @@ g.withSack(0.0).V().as("from").       <1>
     <7> Order the output by the start vertex id and then the end vertex id 
(for better readability).
     <8> Deduplicate vertex pairs (the shortest path from `v[1]` to `v[6]` is 
the same as the path from `v[6]` to `v[1]`).
     
    +Again, this can be translated into an OLAP query using the 
`shortestPath()` step.
    +
    +[gremlin-groovy,existing]
    +----
    +result = g.withComputer().V().
    +  shortestPath().
    +    with(ShortestPath.distance, 'weight').
    +    with(ShortestPath.includeEdges, true).
    +  filter(count(local).is(gt(1))).
    +  group().
    +    by(project('from','to').
    +         by(limit(local, 1)).
    +         by(tail(local, 1))).
    +  unfold().
    +  order().
    +    by(select(keys).select('from').id()).
    +    by(select(keys).select('to').id()).toList()
    +----
    +
    +The obvious difference in the result is the absence of property values in 
the OLAP result. Since OLAP traversers are not
    +allowed to leave the local star graph, it's not possible to have the exact 
same result in an OLAP query. However, the determined
    +shortest paths can be passed back into the OLTP `GraphTraversalSource`, 
which can then be used to query the values.
    +
    +[gremlin-groovy,existing]
    +----
    +g.withSideEffect('v', []).                            <1>
    +  inject(result.toArray()).as('kv').select(values).
    +  unfold().
    +  map(unfold().as('v_or_e').
    +      coalesce(V().where(eq('v_or_e')).store('v'),
    +               select('v').tail(local, 1).bothE().where(eq('v_or_e'))).
    +      values('name','weight').
    +      fold()).
    +  group().
    +    by(select('kv').select(keys)).unfold().
    +  order().
    +    by(select(keys).select('from').id()).
    +    by(select(keys).select('to').id()).toList()
    +----
    +
    +<1> The side-effect `v` is used to keep track of the last processed 
vertex, hence it needs to be an order-preserving list. Without this explicit 
definition `v` would become a `BulkSet` which doesn't preserve the insert order.
    --- End diff --
    
    interesting


> Add a shortestPath() step
> -------------------------
>
>                 Key: TINKERPOP-1990
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1990
>             Project: TinkerPop
>          Issue Type: Improvement
>          Components: process
>            Reporter: Daniel Kuppitz
>            Assignee: Daniel Kuppitz
>            Priority: Major
>
> Implement {{ShortestPathVertexProgram}} and a {{shortestPath()}} step.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to