[
https://issues.apache.org/jira/browse/TINKERPOP-2325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17013020#comment-17013020
]
Marco Valzelli edited comment on TINKERPOP-2325 at 1/10/20 4:13 PM:
--------------------------------------------------------------------
I succedeed in modifing the original sparql-to-gremlin code in a more optimized
copy that can be found at [https://github.com/thevalzo/sparql-to-gremlin] .
The main changes that has been made in:
TraversalBuilder class: use traversal.has instead of traversal.hasValue
WhereTraversalBuilder class: examinate previous graph pattern in order to able
to write "__.as(subject).has(uri, P.eq(value));"
I have made an attempt to fix also the union operator (in
SparqlToGremlinCompiler) transforming it in an or, but it not works. So there
still some case to fix:
-UNION operator
-OR operator
-AND, OR inside a filter
Note that for UNION and OR there are already some work in progress in
Janusgraph: https://github.com/JanusGraph/janusgraph/issues/163
Of course there are to be done extensive tests, but I think i have done some
step forward and i wanted to share it
was (Author: m.valzelli):
I succedeed in modifing the original sparql-to-gremlin code in a more optimized
copy that can be found at [https://github.com/thevalzo/sparql-to-gremlin] .
The main changes that has been made in:
TraversalBuilder class: use traversal.has instead of traversal.hasValue
WhereTraversalBuilder class: examinate previous graph pattern in order to able
to write "__.as(subject).has(uri, P.eq(value));"
I have made an attempt to fix also the union operator (in
SparqlToGremlinCompiler) transforming it in an or, but it not works. So there
still some case to fix:
-UNION operator
-OR operator
-AND, OR inside a filter
Of course there are to be done extensive tests, but I think i have done some
step forward and i wanted to share it
> Generate traversals that will better yield index lookups with SPARQL
> --------------------------------------------------------------------
>
> Key: TINKERPOP-2325
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2325
> Project: TinkerPop
> Issue Type: Improvement
> Components: sparql
> Affects Versions: 3.4.4
> Reporter: Stephen Mallette
> Priority: Major
>
> The following simple bit of SPARQL generates a {{match()}} that wont easily
> be converted to further utilize indices.
> {code}
> gremlin> s.sparql("SELECT ?x WHERE { ?x v:name 'marko' }").explain()
> ==>Traversal Explanation
> ===========================================================================================================================================================================================
> Original Traversal [InjectStep([SELECT ?x WHERE { ?x v:name
> 'marko' }])]
> ConnectiveStrategy [D] [InjectStep([SELECT ?x WHERE { ?x v:name
> 'marko' }])]
> SparqlStrategy [D] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> MatchPredicateStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> FilterRankingStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> EarlyLimitStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> InlineFilterStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> RepeatUnrollStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> CountStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> PathRetractionStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> LazyBarrierStrategy [O] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> TinkerGraphCountStrategy [P] [GraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> ProfileStrategy [F] [TinkerGraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> Final Traversal [TinkerGraphStep(vertex,[]),
> MatchStep(AND,[[MatchStartStep(x), PropertiesStep([name],value),
> IsStep(eq(marko)), MatchEndStep]]), SelectOneStep(last,x)]
> {code}
> {{sparql-gremlin}} needs some improvements in this area.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)