running a gremlin query in groovy using groovyc , code examples

101 views
Skip to first unread message

sck2015

unread,
Mar 20, 2015, 12:24:53 PM3/20/15
to orient-...@googlegroups.com
I am trying to find path traversals and explore them by increasing weight, I was able to do this in gremlin and was trying to replicate the code in groovy (using groovyc to compile a groovy file and integrate with my other java code)... Can someone point me to documentation or how to execute the following query in a .groovy file, my understanding is that gremlin is interpreted by groovy but I cannot cache the results of the following pipeline which should return a set of weights and paths:

 public static List  findAllPaths(Vertex s, Vertex e) {
        String targetName = e.getProperty("firstName");
        // look at paths that end at target, match on first name, calc weights of these paths
        results = s.outE.inV.loop(2){it.object.firstName!=targetName && it.loops < 6}.path.filter{it.last().firstName==targetName}.transform{[it.findAll{it instanceof Edge}.sum{it.weight}, it]};
        // how to save results of pipe

    } 

I've gotten simple gremlin queries to return and pass back a list to java, I could try stringing together gremlin pipelines but I thought the point of having .groovy files was to be able to use/integrate gremlin directly to talk to java, thanks, Sonu

W. Craig Trader

unread,
Mar 28, 2015, 8:15:37 PM3/28/15
to orient-...@googlegroups.com
What you're missing is (1) initializing Gremlin, and (2) collecting results.  To initialize Gremlin, your code needs to execute the following once (and preferably only once):

import com.tinkerpop.gremlin.groovy.Gremlin

Gremlin.load()

Once you've done that, you can run your query.  Right now your method creates a Gremlin query, but hasn't started it.  There are lots of ways to collect results; one way would be to use the Groovy collect() if you're expecting a list of results. For something more complicated, such as the what you're doing, I'd suggest something like this:

import com.tinkerpop.pipes.util.structures.Table

def t = new Table()
s.outE.inV.loop(2){it.object.firstName!=targetName && it.loops < 6}.path.filter{it.last().firstName==targetName}.transform{[it.findAll{it instanceof Edge}.sum{it.weight}, it]}.table( t ).iterate()

That should give you a table structure that contains your results.

- Craig -

--

---
You received this message because you are subscribed to the Google Groups "OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email to orient-databa...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages