On Tue, Oct 25, 2011 at 12:35 PM, Peter Neubauer < [email protected]> wrote:
> Yes, > that is true. We are still in QA with 1.5 GA, expect it during the > next few weeks as we are hunting down HA potential issues. Hope it is > ok to wait for some more days? > Sure no problem. :) > > Cheers, > > /peter neubauer > > GTalk: neubauer.peter > Skype peter.neubauer > Phone +46 704 106975 > LinkedIn http://www.linkedin.com/in/neubauer > Twitter http://twitter.com/peterneubauer > > http://www.neo4j.org - NOSQL for the Enterprise. > http://startupbootcamp.org/ - Ă–resund - Innovation happens HERE. > > > > On Tue, Oct 25, 2011 at 2:32 PM, Nuo Yan <[email protected]> wrote: > > Hi Marko, > > > > I believe 1.5 milestone release has Gremlin 1.3 and Blueprints 1.0 but > > before 1.5 stable release I'm going to be using 1.4.x. In 1.4.2 it only > has > > Gremlin 1.2 and doesn't appear to have the setTransactionBufferSize > stuff. > > > > On Tue, Oct 25, 2011 at 11:52 AM, Marko Rodriguez <[email protected] > >wrote: > > > >> Hi, > >> > >> Note that with Blueprints 1.0, you do not have to deal with a commit > >> manager. You can do: > >> > >> graph.setTransactionBufferSize(50); > >> > >> ...and then simply do your traversal. No manager.incrCount() needed. I > >> believe the latest Neo4j release uses Gremlin 1.3 and Blueprints 1.0. ?? > >> Peter? > >> > >> Take care, > >> Marko. > >> > >> http://markorodriguez.com > >> > >> On Oct 25, 2011, at 12:43 PM, Nuo Yan wrote: > >> > >> > For the record, in case someone else has similar need, I came up with > the > >> > following query that does what I described in the last email below > (still > >> on > >> > gremlin 1.2 so still using Commit Manager): > >> > > >> > manager = TransactionalGraphHelper.createCommitManager(g, 50); > >> > g.v(1).out('foo').transform{[it, it.name, > >> > > >> > it.outE('bar').count()]}.aggregate().cap.next().groupBy{it[1]}.each{key,value > >> > -> value.sort{a,b -> b[2] <=> a[2]}.eachWithIndex{a,i -> if(i > 0) > >> > {g.removeVertex(a[0]); manager.incrCounter()}}} > >> > manager.close(); > >> > > >> > After going through this I got a lot better understanding in Gremlin. > >> Thanks > >> > Peter and Marko. > >> > > >> > > >> > On Sat, Oct 22, 2011 at 6:04 PM, Nuo Yan <[email protected]> wrote: > >> > > >> >> Thanks very much Marko. I researched the query one step at a time and > >> >> gained much more knowledge about gremlin. > >> >> > >> >> However, I wanted to do something a little bit different, instead of > >> >> comparing the "name" property of the children nodes to the source > node, > >> I > >> >> wanted to compare among the siblings of the children nodes (only > first > >> level > >> >> under the source node) and if there are duplicates, only keep the one > >> with > >> >> the biggest degree of "bar" relationship. (The source node doesn't > have > >> a > >> >> "name" property). > >> >> > >> >> For example, > >> >> > >> >> v(1) --foo--> v(2) name: "abc" --bar--> (15 nodes) > >> >> v(1) --foo--> v(3) name: "abc --bar --> (20 nodes) > >> >> v(1) --foo--> v(4) name "xyz" --bar--> (15 nodes) > >> >> v(1) --foo--> v(5) name "xyz" --bar--> (25 nodes) > >> >> > >> >> would become: > >> >> > >> >> v(1) --foo--> v(3) name: "abc --bar --> (20 nodes) > >> >> v(1) --foo--> v(5) name "xyz" --bar--> (25 nodes) > >> >> > >> >> So instead of doing > >> >> > >> >> > >> >> g.v(1).sideEffect{x = > >> >> > >> > it.getProperty('name')}.out('foo').filter{it.getProperty('name').equals(x)} > >> >> > >> >> I proposed doing: > >> >> > >> >> g.v(1).out("foo").transform{[it, it.name, > >> >> it.out("bar").count]}.aggregate.cap > >> >> > >> >> to get an array of first level children nodes, their names, and > degree > >> of > >> >> "bar" edges like [v(2), "abc", 15], [v(3), "abc", 20], [v(4), "xyz", > >> 15], > >> >> [v(5), "xyz", 20] > >> >> > >> >> And then I can sort the array by the name property, and iterate > through > >> >> that array to delete nodes that have a smaller count based on the > count > >> >> value specified in each sub array. > >> >> > >> >> But since my gremlin knowledge is still very limited, before digging > too > >> >> much into this proposed solution I want to verify with you that it > would > >> >> work and see if you have better or easier approach to do it (i.e. > maybe > >> one > >> >> simple method that I can make use that I'm not aware of). Thanks > very > >> much > >> >> again. > >> >> > >> >> > >> >> On Sat, Oct 22, 2011 at 9:40 AM, Marko Rodriguez < > [email protected] > >> >wrote: > >> >> > >> >>> Hi, > >> >>> > >> >>>> Currently I'm doing the following in my own code with multiple > >> requests > >> >>> to the standalone neo4j server. I wonder if it's possible to achieve > in > >> one > >> >>> gremlin query/script so that I can post the gremlin query to the > server > >> as 1 > >> >>> request and done. What I'm trying to achieve is: > >> >>>> > >> >>>> Start from one given node (e.g. v1), get all of the nodes connected > >> >>> through a given type of relationship (e.g. relationship "foo"), > within > >> all > >> >>> of these nodes, see if their "name" property has the same value, and > if > >> so, > >> >>> delete the node (and the "foo" relationship connected to it) with > >> smaller > >> >>> outgoing degree (on a specific type of relationship, say, "bar"). If > >> there > >> >>> are more than two nodes with the same "name" property, only keep the > >> one > >> >>> with biggest outgoing degree (on type "bar"). > >> >>> > >> >>> > >> >>> The query below is to warm you up. It will delete all vertices with > >> same > >> >>> property value as source vertex that are 'foo' related to source > >> vertex. > >> >>> Given that you are mutating the graph, you will want to deal with > >> >>> transaction buffers so you don't do one transaction per mutations: > >> >>> > https://github.com/tinkerpop/blueprints/wiki/Graph-Transactions > >> >>> > >> >>> g.v(1).sideEffect{x = > >> >>> > >> > it.getProperty('name')}.out('foo').filter{it.getProperty('name').equals(x)}.sideEffect{g.removeVertex(it)} > >> >>> > >> >>> ----------------------------------------- > >> >>> > >> >>> To do the stuff with the smaller counts, etc. You can do: > >> >>> > >> >>> g.v(1).sideEffect{x = > >> >>> > >> > it.getProperty('name')}.out('foo').filter{it.getProperty('name').equals(x)}.transform{[it, > >> >>> it.outE('bar').count()]}.filter{it[1] > > >> 0}.aggregate.cap.next().sort{a,b -> > >> >>> b[1] <=> a[1]}.eachWithIndex{a,i -> if(i > 0) g.removeVertex(a[0])} > >> >>> > >> >>> There you go! One big fatty Gremlin query to solve your problem. > >> >>> > >> >>> I would recommend going through each step and seeing what it returns > so > >> >>> you understand what is going on.... Again, given that you are > mutating > >> the > >> >>> graph, be sure to be wise about transactions. > >> >>> > >> >>> Enjoy!, > >> >>> Marko. > >> >>> > >> >>> http://markorodriguez.com > >> >>> > >> >>> _______________________________________________ > >> >>> Neo4j mailing list > >> >>> [email protected] > >> >>> https://lists.neo4j.org/mailman/listinfo/user > >> >>> > >> >> > >> >> > >> > _______________________________________________ > >> > Neo4j mailing list > >> > [email protected] > >> > https://lists.neo4j.org/mailman/listinfo/user > >> > >> _______________________________________________ > >> Neo4j mailing list > >> [email protected] > >> https://lists.neo4j.org/mailman/listinfo/user > >> > > _______________________________________________ > > Neo4j mailing list > > [email protected] > > https://lists.neo4j.org/mailman/listinfo/user > > > _______________________________________________ > Neo4j mailing list > [email protected] > https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

