Re: [Neo4j] Wrong Gremlin results through REST interface
If your versions are not consistent then this may be the reason why you're traversals in Gremlin REPL are working, but not in Gremlin Plugin (for example). This was indeed the case for me, I compared the Gremlin version 1.3 locally to 1.1 in the webconsole. Thanks for pointing this out. Cheers, Jeroen HTH, Marko. http://markorodriguez.com On Nov 8, 2011, at 8:52 AM, Peter Neubauer wrote: Hi all (and Romiko), it might be that this issue, as Romikos, is confusion about the use of the {}. In Gremlin 1.3, you have to explicitly use filter{} in order to do this, see https://github.com/neo4j/gremlin-plugin/issues/3 for an example. I have locally comitted a documentation example for this, but I am waiting for the release to finish before pushing it. Could you try this? 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, Nov 8, 2011 at 11:43 AM, Peter Neubauer peter.neuba...@neotechnology.com wrote: Yup, I have at least Tathams issue to start with. Will report back and see if it solves this one too. Feel free to add this example to the issue on the Gremlin plugin. On Nov 8, 2011 12:32 PM, Michael Hunger michael.hun...@neotechnology.com wrote: There are some weird things going on. Probably have to do with javax.script.ScriptEngine.eval() We should investigate this thoroughly. Perhaps Peter and Marko can spend some cycles on it. Michael 1) behaviour native gremlin vs 2) Neo4j web console vs. 3) REST-calls Am 08.11.2011 um 12:02 schrieb Jeroen van Dijk: HI Michael, Thanks for this solution. The webconsole now gives me the right results also for recommendation query. There is however still something weird when I use this recommendation query in the gremlin console: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it : it += (1.0/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] No signature of method: com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jVertex.plus() is applicable for argument types: (java.math.BigDecimal) values: [0.0303030303] Possible solutions: values(), keys(), use([Ljava.lang.Object;), values(java.lang.Object), is(java.lang.Object), split(groovy.lang.Closure) The weird thing is that exact same query does work in the webconsole.. Consider my issue solved though. Thanks a lot. Jeroen On Mon, Nov 7, 2011 at 1:25 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, could you try to use the alternative syntax: ... groupCount(m) { it : it += 0.1 } ... It seems to be a problem with evaluation of the string in the javax.ScriptEngine for Groovy Here is the output from my web-console: • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m • == follows=11 • == owns=48 • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it : it += 0.1 } -1;m • == follows=1.1 • == owns=4.8 Michael Am 07.11.2011 um 12:55 schrieb Jeroen van Dijk: Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html) Locally: gremlin m = [:];g.v(33).bothE().label.groupCount(m) -1;m ==follows=11 ==owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m ==follows=1.1 ==owns=4.8 REST/webadmin console: gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m == follows=11 == owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 10 } -1;m == follows=11 == owns=48 gremlin It seems like the closure block is not evaluated (to me as a Groovy/Gremlin/Neo4j noob) Michael, I will send you a link to my database in private. Thanks, Jeroen On Mon, Nov 7, 2011 at 12:41 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score right? The thing is that I get different Vertices back through the REST interface than I do locally. To me that means things already fail during the Gremlin evaluation. I will try to come up
Re: [Neo4j] Wrong Gremlin results through REST interface
HI Michael, Thanks for this solution. The webconsole now gives me the right results also for recommendation query. There is however still something weird when I use this recommendation query in the gremlin console: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it : it += (1.0/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] No signature of method: com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jVertex.plus() is applicable for argument types: (java.math.BigDecimal) values: [0.0303030303] Possible solutions: values(), keys(), use([Ljava.lang.Object;), values(java.lang.Object), is(java.lang.Object), split(groovy.lang.Closure) The weird thing is that exact same query does work in the webconsole.. Consider my issue solved though. Thanks a lot. Jeroen On Mon, Nov 7, 2011 at 1:25 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, could you try to use the alternative syntax: ... groupCount(m) { it : it += 0.1 } ... It seems to be a problem with evaluation of the string in the javax.ScriptEngine for Groovy Here is the output from my web-console: • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m • == follows=11 • == owns=48 • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it : it += 0.1 } -1;m • == follows=1.1 • == owns=4.8 Michael Am 07.11.2011 um 12:55 schrieb Jeroen van Dijk: Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html) Locally: gremlin m = [:];g.v(33).bothE().label.groupCount(m) -1;m ==follows=11 ==owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m ==follows=1.1 ==owns=4.8 REST/webadmin console: gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m == follows=11 == owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 10 } -1;m == follows=11 == owns=48 gremlin It seems like the closure block is not evaluated (to me as a Groovy/Gremlin/Neo4j noob) Michael, I will send you a link to my database in private. Thanks, Jeroen On Mon, Nov 7, 2011 at 12:41 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score right? The thing is that I get different Vertices back through the REST interface than I do locally. To me that means things already fail during the Gremlin evaluation. I will try to come up with a more isolated example. If it helps I could give you access to my dataset on Heroku (or through a Zip file). thanks, Jeroen On Mon, Nov 7, 2011 at 11:34 AM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, can you narrow it down to a simpler operation, like just a division? Perhaps in the conversion from the division result (be it Float, Double, BigDecimal) to JSON something goes awry. In the GremlinPlugin the code for that is: } else if (result instanceof Double || result instanceof Float) { return ValueRepresentation.number(((Number) result).doubleValue()); } I'm not sure what datatype groovy creates as result of your operation, perhaps you can determine that as well. If we have a simple gremlin / groovy calculation that yields the wrong results, we can easily inspect and fix the plugin. Thanks a lot Michael Am 07.11.2011 um 11:12 schrieb Jeroen van Dijk: Hi all, I'm using Gremlin to perform a recommendation query. Locally in the gremlin shell I get amazingly useful results. However when I use the webadmin gremlin console I get different results, both locally and in the Heroku addon environment. I get the same wrong results when I use the rest interface, so I assume something is incorrect in the Gremlin REST interface. In all these cases the data is the same or on the same database. The gremlin query is below (it is own of my first so probably not the most efficient). It returns the top 10 list of most similar items according to the Jaccard similarity index (= (Intersection(A, B) / Union(A, B) ): node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] When I do the following locally everything is fine:
Re: [Neo4j] Wrong Gremlin results through REST interface
There are some weird things going on. Probably have to do with javax.script.ScriptEngine.eval() We should investigate this thoroughly. Perhaps Peter and Marko can spend some cycles on it. Michael 1) behaviour native gremlin vs 2) Neo4j web console vs. 3) REST-calls Am 08.11.2011 um 12:02 schrieb Jeroen van Dijk: HI Michael, Thanks for this solution. The webconsole now gives me the right results also for recommendation query. There is however still something weird when I use this recommendation query in the gremlin console: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it : it += (1.0/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] No signature of method: com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jVertex.plus() is applicable for argument types: (java.math.BigDecimal) values: [0.0303030303] Possible solutions: values(), keys(), use([Ljava.lang.Object;), values(java.lang.Object), is(java.lang.Object), split(groovy.lang.Closure) The weird thing is that exact same query does work in the webconsole.. Consider my issue solved though. Thanks a lot. Jeroen On Mon, Nov 7, 2011 at 1:25 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, could you try to use the alternative syntax: ... groupCount(m) { it : it += 0.1 } ... It seems to be a problem with evaluation of the string in the javax.ScriptEngine for Groovy Here is the output from my web-console: • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m • == follows=11 • == owns=48 • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it : it += 0.1 } -1;m • == follows=1.1 • == owns=4.8 Michael Am 07.11.2011 um 12:55 schrieb Jeroen van Dijk: Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html) Locally: gremlin m = [:];g.v(33).bothE().label.groupCount(m) -1;m ==follows=11 ==owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m ==follows=1.1 ==owns=4.8 REST/webadmin console: gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m == follows=11 == owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 10 } -1;m == follows=11 == owns=48 gremlin It seems like the closure block is not evaluated (to me as a Groovy/Gremlin/Neo4j noob) Michael, I will send you a link to my database in private. Thanks, Jeroen On Mon, Nov 7, 2011 at 12:41 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score right? The thing is that I get different Vertices back through the REST interface than I do locally. To me that means things already fail during the Gremlin evaluation. I will try to come up with a more isolated example. If it helps I could give you access to my dataset on Heroku (or through a Zip file). thanks, Jeroen On Mon, Nov 7, 2011 at 11:34 AM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, can you narrow it down to a simpler operation, like just a division? Perhaps in the conversion from the division result (be it Float, Double, BigDecimal) to JSON something goes awry. In the GremlinPlugin the code for that is: } else if (result instanceof Double || result instanceof Float) { return ValueRepresentation.number(((Number) result).doubleValue()); } I'm not sure what datatype groovy creates as result of your operation, perhaps you can determine that as well. If we have a simple gremlin / groovy calculation that yields the wrong results, we can easily inspect and fix the plugin. Thanks a lot Michael Am 07.11.2011 um 11:12 schrieb Jeroen van Dijk: Hi all, I'm using Gremlin to perform a recommendation query. Locally in the gremlin shell I get amazingly useful results. However when I use the webadmin gremlin console I get different results, both locally and in the Heroku addon environment. I get the same wrong results when I use the rest interface, so I assume something is incorrect in the Gremlin REST interface. In all these cases the data is the same or on the same database. The gremlin query is below (it is own of my first so probably not the most efficient). It returns the top 10 list of most similar items according to the Jaccard similarity index (= (Intersection(A, B) / Union(A, B) ): node = g.v(14260); m =
Re: [Neo4j] Wrong Gremlin results through REST interface
Yup, I have at least Tathams issue to start with. Will report back and see if it solves this one too. Feel free to add this example to the issue on the Gremlin plugin. On Nov 8, 2011 12:32 PM, Michael Hunger michael.hun...@neotechnology.com wrote: There are some weird things going on. Probably have to do with javax.script.ScriptEngine.eval() We should investigate this thoroughly. Perhaps Peter and Marko can spend some cycles on it. Michael 1) behaviour native gremlin vs 2) Neo4j web console vs. 3) REST-calls Am 08.11.2011 um 12:02 schrieb Jeroen van Dijk: HI Michael, Thanks for this solution. The webconsole now gives me the right results also for recommendation query. There is however still something weird when I use this recommendation query in the gremlin console: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it : it += (1.0/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] No signature of method: com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jVertex.plus() is applicable for argument types: (java.math.BigDecimal) values: [0.0303030303] Possible solutions: values(), keys(), use([Ljava.lang.Object;), values(java.lang.Object), is(java.lang.Object), split(groovy.lang.Closure) The weird thing is that exact same query does work in the webconsole.. Consider my issue solved though. Thanks a lot. Jeroen On Mon, Nov 7, 2011 at 1:25 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, could you try to use the alternative syntax: ... groupCount(m) { it : it += 0.1 } ... It seems to be a problem with evaluation of the string in the javax.ScriptEngine for Groovy Here is the output from my web-console: • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m • == follows=11 • == owns=48 • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it : it += 0.1 } -1;m • == follows=1.1 • == owns=4.8 Michael Am 07.11.2011 um 12:55 schrieb Jeroen van Dijk: Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html) Locally: gremlin m = [:];g.v(33).bothE().label.groupCount(m) -1;m ==follows=11 ==owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m ==follows=1.1 ==owns=4.8 REST/webadmin console: gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m == follows=11 == owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 10 } -1;m == follows=11 == owns=48 gremlin It seems like the closure block is not evaluated (to me as a Groovy/Gremlin/Neo4j noob) Michael, I will send you a link to my database in private. Thanks, Jeroen On Mon, Nov 7, 2011 at 12:41 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score right? The thing is that I get different Vertices back through the REST interface than I do locally. To me that means things already fail during the Gremlin evaluation. I will try to come up with a more isolated example. If it helps I could give you access to my dataset on Heroku (or through a Zip file). thanks, Jeroen On Mon, Nov 7, 2011 at 11:34 AM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, can you narrow it down to a simpler operation, like just a division? Perhaps in the conversion from the division result (be it Float, Double, BigDecimal) to JSON something goes awry. In the GremlinPlugin the code for that is: } else if (result instanceof Double || result instanceof Float) { return ValueRepresentation.number(((Number) result).doubleValue()); } I'm not sure what datatype groovy creates as result of your operation, perhaps you can determine that as well. If we have a simple gremlin / groovy calculation that yields the wrong results, we can easily inspect and fix the plugin. Thanks a lot Michael Am 07.11.2011 um 11:12 schrieb Jeroen van Dijk: Hi all, I'm using Gremlin to perform a recommendation query. Locally in the gremlin shell I get amazingly useful results. However when I use the webadmin gremlin console I get different results, both locally and in the Heroku addon environment. I get the same wrong results when I use the rest interface, so I assume
Re: [Neo4j] Wrong Gremlin results through REST interface
Hi all (and Romiko), it might be that this issue, as Romikos, is confusion about the use of the {}. In Gremlin 1.3, you have to explicitly use filter{} in order to do this, see https://github.com/neo4j/gremlin-plugin/issues/3 for an example. I have locally comitted a documentation example for this, but I am waiting for the release to finish before pushing it. Could you try this? 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, Nov 8, 2011 at 11:43 AM, Peter Neubauer peter.neuba...@neotechnology.com wrote: Yup, I have at least Tathams issue to start with. Will report back and see if it solves this one too. Feel free to add this example to the issue on the Gremlin plugin. On Nov 8, 2011 12:32 PM, Michael Hunger michael.hun...@neotechnology.com wrote: There are some weird things going on. Probably have to do with javax.script.ScriptEngine.eval() We should investigate this thoroughly. Perhaps Peter and Marko can spend some cycles on it. Michael 1) behaviour native gremlin vs 2) Neo4j web console vs. 3) REST-calls Am 08.11.2011 um 12:02 schrieb Jeroen van Dijk: HI Michael, Thanks for this solution. The webconsole now gives me the right results also for recommendation query. There is however still something weird when I use this recommendation query in the gremlin console: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it : it += (1.0/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] No signature of method: com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jVertex.plus() is applicable for argument types: (java.math.BigDecimal) values: [0.0303030303] Possible solutions: values(), keys(), use([Ljava.lang.Object;), values(java.lang.Object), is(java.lang.Object), split(groovy.lang.Closure) The weird thing is that exact same query does work in the webconsole.. Consider my issue solved though. Thanks a lot. Jeroen On Mon, Nov 7, 2011 at 1:25 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, could you try to use the alternative syntax: ... groupCount(m) { it : it += 0.1 } ... It seems to be a problem with evaluation of the string in the javax.ScriptEngine for Groovy Here is the output from my web-console: • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m • == follows=11 • == owns=48 • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it : it += 0.1 } -1;m • == follows=1.1 • == owns=4.8 Michael Am 07.11.2011 um 12:55 schrieb Jeroen van Dijk: Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html) Locally: gremlin m = [:];g.v(33).bothE().label.groupCount(m) -1;m ==follows=11 ==owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m ==follows=1.1 ==owns=4.8 REST/webadmin console: gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m == follows=11 == owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 10 } -1;m == follows=11 == owns=48 gremlin It seems like the closure block is not evaluated (to me as a Groovy/Gremlin/Neo4j noob) Michael, I will send you a link to my database in private. Thanks, Jeroen On Mon, Nov 7, 2011 at 12:41 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score right? The thing is that I get different Vertices back through the REST interface than I do locally. To me that means things already fail during the Gremlin evaluation. I will try to come up with a more isolated example. If it helps I could give you access to my dataset on Heroku (or through a Zip file). thanks, Jeroen On Mon, Nov 7, 2011 at 11:34 AM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, can you narrow it down to a simpler operation, like just a division? Perhaps in the conversion from the division result (be it Float, Double, BigDecimal) to JSON something goes awry. In the GremlinPlugin the code for that
Re: [Neo4j] Wrong Gremlin results through REST interface
Hey, To expand on Peter's point. I suspect people are mixing versions of Gremlin. Gremlin is generally (not usually) backwards compatible from version to version. If you are using Gremlin REPL, GremlinPlugin, and Gremlin from Neo4j WebAdmin, its good to make sure you have the same version of Gremlin in instances. Here is how you check: GremlinTokens.VERSION (for old skool Gremlin) Gremlin.version() (for new skool Gremlin) If your versions are not consistent then this may be the reason why you're traversals in Gremlin REPL are working, but not in Gremlin Plugin (for example). HTH, Marko. http://markorodriguez.com On Nov 8, 2011, at 8:52 AM, Peter Neubauer wrote: Hi all (and Romiko), it might be that this issue, as Romikos, is confusion about the use of the {}. In Gremlin 1.3, you have to explicitly use filter{} in order to do this, see https://github.com/neo4j/gremlin-plugin/issues/3 for an example. I have locally comitted a documentation example for this, but I am waiting for the release to finish before pushing it. Could you try this? 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, Nov 8, 2011 at 11:43 AM, Peter Neubauer peter.neuba...@neotechnology.com wrote: Yup, I have at least Tathams issue to start with. Will report back and see if it solves this one too. Feel free to add this example to the issue on the Gremlin plugin. On Nov 8, 2011 12:32 PM, Michael Hunger michael.hun...@neotechnology.com wrote: There are some weird things going on. Probably have to do with javax.script.ScriptEngine.eval() We should investigate this thoroughly. Perhaps Peter and Marko can spend some cycles on it. Michael 1) behaviour native gremlin vs 2) Neo4j web console vs. 3) REST-calls Am 08.11.2011 um 12:02 schrieb Jeroen van Dijk: HI Michael, Thanks for this solution. The webconsole now gives me the right results also for recommendation query. There is however still something weird when I use this recommendation query in the gremlin console: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it : it += (1.0/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] No signature of method: com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jVertex.plus() is applicable for argument types: (java.math.BigDecimal) values: [0.0303030303] Possible solutions: values(), keys(), use([Ljava.lang.Object;), values(java.lang.Object), is(java.lang.Object), split(groovy.lang.Closure) The weird thing is that exact same query does work in the webconsole.. Consider my issue solved though. Thanks a lot. Jeroen On Mon, Nov 7, 2011 at 1:25 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, could you try to use the alternative syntax: ... groupCount(m) { it : it += 0.1 } ... It seems to be a problem with evaluation of the string in the javax.ScriptEngine for Groovy Here is the output from my web-console: • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m • == follows=11 • == owns=48 • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it : it += 0.1 } -1;m • == follows=1.1 • == owns=4.8 Michael Am 07.11.2011 um 12:55 schrieb Jeroen van Dijk: Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html) Locally: gremlin m = [:];g.v(33).bothE().label.groupCount(m) -1;m ==follows=11 ==owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m ==follows=1.1 ==owns=4.8 REST/webadmin console: gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m == follows=11 == owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 10 } -1;m == follows=11 == owns=48 gremlin It seems like the closure block is not evaluated (to me as a Groovy/Gremlin/Neo4j noob) Michael, I will send you a link to my database in private. Thanks, Jeroen On Mon, Nov 7, 2011 at 12:41 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score
Re: [Neo4j] Wrong Gremlin results through REST interface
Hi, I am not sure of this, since the console version with .filter{ it works, and in rest it does not. I then ran a version in the console and via rest and they both the same version, am I doing something wrong? Either way, I will update our rest client to use the explicit filter expression. Console Version: gremlin Gremlin.version() == 1.2 REST Version http://localhost:20001/db/data/ext/GremlinPlugin/graphdb/execute_script User-Agent: Fiddler Host: localhost:20001 Accept: application/json Content-Type: application/x-www-form-urlencoded Request Body: script=Gremlin.version() Response: 1.2 Peter, is it possible to explain why the REST needs the explicit .filter and the console not? Just for future reference, since if the versions were different then it would make sense to me? Thank You -Original Message- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Marko Rodriguez Sent: Wednesday, 9 November 2011 3:06 AM To: Peter Neubauer Cc: Neo4j user discussions; Michael Hunger Subject: Re: [Neo4j] Wrong Gremlin results through REST interface Hey, To expand on Peter's point. I suspect people are mixing versions of Gremlin. Gremlin is generally (not usually) backwards compatible from version to version. If you are using Gremlin REPL, GremlinPlugin, and Gremlin from Neo4j WebAdmin, its good to make sure you have the same version of Gremlin in instances. Here is how you check: GremlinTokens.VERSION (for old skool Gremlin) Gremlin.version() (for new skool Gremlin) If your versions are not consistent then this may be the reason why you're traversals in Gremlin REPL are working, but not in Gremlin Plugin (for example). HTH, Marko. http://markorodriguez.com On Nov 8, 2011, at 8:52 AM, Peter Neubauer wrote: Hi all (and Romiko), it might be that this issue, as Romikos, is confusion about the use of the {}. In Gremlin 1.3, you have to explicitly use filter{} in order to do this, see https://github.com/neo4j/gremlin-plugin/issues/3 for an example. I have locally comitted a documentation example for this, but I am waiting for the release to finish before pushing it. Could you try this? 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, Nov 8, 2011 at 11:43 AM, Peter Neubauer peter.neuba...@neotechnology.com wrote: Yup, I have at least Tathams issue to start with. Will report back and see if it solves this one too. Feel free to add this example to the issue on the Gremlin plugin. On Nov 8, 2011 12:32 PM, Michael Hunger michael.hun...@neotechnology.com wrote: There are some weird things going on. Probably have to do with javax.script.ScriptEngine.eval() We should investigate this thoroughly. Perhaps Peter and Marko can spend some cycles on it. Michael 1) behaviour native gremlin vs 2) Neo4j web console vs. 3) REST-calls Am 08.11.2011 um 12:02 schrieb Jeroen van Dijk: HI Michael, Thanks for this solution. The webconsole now gives me the right results also for recommendation query. There is however still something weird when I use this recommendation query in the gremlin console: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it : it += (1.0/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] No signature of method: com.tinkerpop.blueprints.pgm.impls.neo4j.Neo4jVertex.plus() is applicable for argument types: (java.math.BigDecimal) values: [0.0303030303] Possible solutions: values(), keys(), use([Ljava.lang.Object;), values(java.lang.Object), is(java.lang.Object), split(groovy.lang.Closure) The weird thing is that exact same query does work in the webconsole.. Consider my issue solved though. Thanks a lot. Jeroen On Mon, Nov 7, 2011 at 1:25 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, could you try to use the alternative syntax: ... groupCount(m) { it : it += 0.1 } ... It seems to be a problem with evaluation of the string in the javax.ScriptEngine for Groovy Here is the output from my web-console: . gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m . == follows=11 . == owns=48 . gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it : it += 0.1 } -1;m . == follows=1.1 . == owns=4.8 Michael Am 07.11.2011 um 12:55 schrieb Jeroen van Dijk: Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot
Re: [Neo4j] Wrong Gremlin results through REST interface
Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score right? The thing is that I get different Vertices back through the REST interface than I do locally. To me that means things already fail during the Gremlin evaluation. I will try to come up with a more isolated example. If it helps I could give you access to my dataset on Heroku (or through a Zip file). thanks, Jeroen On Mon, Nov 7, 2011 at 11:34 AM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, can you narrow it down to a simpler operation, like just a division? Perhaps in the conversion from the division result (be it Float, Double, BigDecimal) to JSON something goes awry. In the GremlinPlugin the code for that is: } else if (result instanceof Double || result instanceof Float) { return ValueRepresentation.number(((Number) result).doubleValue()); } I'm not sure what datatype groovy creates as result of your operation, perhaps you can determine that as well. If we have a simple gremlin / groovy calculation that yields the wrong results, we can easily inspect and fix the plugin. Thanks a lot Michael Am 07.11.2011 um 11:12 schrieb Jeroen van Dijk: Hi all, I'm using Gremlin to perform a recommendation query. Locally in the gremlin shell I get amazingly useful results. However when I use the webadmin gremlin console I get different results, both locally and in the Heroku addon environment. I get the same wrong results when I use the rest interface, so I assume something is incorrect in the Gremlin REST interface. In all these cases the data is the same or on the same database. The gremlin query is below (it is own of my first so probably not the most efficient). It returns the top 10 list of most similar items according to the Jaccard similarity index (= (Intersection(A, B) / Union(A, B) ): node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] When I do the following locally everything is fine: gremlin g = new Neo4jGraph('/usr/local/Cellar/neo4j/community-1.4/libexec/data/graph.db') ==neo4jgraph[EmbeddedGraphDatabase [/usr/local/Cellar/neo4j/community-1.4/libexec/data/graph.db]] gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] ==v[14260]=0.500013 ==v[12974]=0.1014492752 ==v[12349]=0.0952380952 ==v[12082]=0.083332 ==v[15434]=0.0810810810 ==v[11237]=0.0810810810 ==v[17672]=0.0769230768 ==v[18338]=0.0769230768 ==v[12852]=0.0769230768 ==v[11969]=0.075 gremlin However when I repeat this using the webadmin console interface I get the following results: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] == v[14260]=31.0 == v[9204]=30.0 == v[8958]=29.0 == v[15763]=22.0 == v[13906]=22.0 == v[18477]=21.0 == v[9081]=20.0 == v[9019]=19.0 == v[9074]=18.0 == v[9066]=18.0 The values of a Jaccard Index should never be above 1 so something is clearly wrong. Any ideas? Thanks, Jeroen ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user
Re: [Neo4j] Wrong Gremlin results through REST interface
Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html) Locally: gremlin m = [:];g.v(33).bothE().label.groupCount(m) -1;m ==follows=11 ==owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m ==follows=1.1 ==owns=4.8 REST/webadmin console: gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m == follows=11 == owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 10 } -1;m == follows=11 == owns=48 gremlin It seems like the closure block is not evaluated (to me as a Groovy/Gremlin/Neo4j noob) Michael, I will send you a link to my database in private. Thanks, Jeroen On Mon, Nov 7, 2011 at 12:41 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score right? The thing is that I get different Vertices back through the REST interface than I do locally. To me that means things already fail during the Gremlin evaluation. I will try to come up with a more isolated example. If it helps I could give you access to my dataset on Heroku (or through a Zip file). thanks, Jeroen On Mon, Nov 7, 2011 at 11:34 AM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, can you narrow it down to a simpler operation, like just a division? Perhaps in the conversion from the division result (be it Float, Double, BigDecimal) to JSON something goes awry. In the GremlinPlugin the code for that is: } else if (result instanceof Double || result instanceof Float) { return ValueRepresentation.number(((Number) result).doubleValue()); } I'm not sure what datatype groovy creates as result of your operation, perhaps you can determine that as well. If we have a simple gremlin / groovy calculation that yields the wrong results, we can easily inspect and fix the plugin. Thanks a lot Michael Am 07.11.2011 um 11:12 schrieb Jeroen van Dijk: Hi all, I'm using Gremlin to perform a recommendation query. Locally in the gremlin shell I get amazingly useful results. However when I use the webadmin gremlin console I get different results, both locally and in the Heroku addon environment. I get the same wrong results when I use the rest interface, so I assume something is incorrect in the Gremlin REST interface. In all these cases the data is the same or on the same database. The gremlin query is below (it is own of my first so probably not the most efficient). It returns the top 10 list of most similar items according to the Jaccard similarity index (= (Intersection(A, B) / Union(A, B) ): node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] When I do the following locally everything is fine: gremlin g = new Neo4jGraph('/usr/local/Cellar/neo4j/community-1.4/libexec/data/graph.db') ==neo4jgraph[EmbeddedGraphDatabase [/usr/local/Cellar/neo4j/community-1.4/libexec/data/graph.db]] gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] ==v[14260]=0.500013 ==v[12974]=0.1014492752 ==v[12349]=0.0952380952 ==v[12082]=0.083332 ==v[15434]=0.0810810810 ==v[11237]=0.0810810810 ==v[17672]=0.0769230768 ==v[18338]=0.0769230768 ==v[12852]=0.0769230768 ==v[11969]=0.075 gremlin However when I repeat this using the webadmin console interface I get the following results: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] == v[14260]=31.0 == v[9204]=30.0 == v[8958]=29.0 == v[15763]=22.0 == v[13906]=22.0 == v[18477]=21.0 == v[9081]=20.0 == v[9019]=19.0 == v[9074]=18.0 == v[9066]=18.0 The values of a Jaccard Index should never be above 1 so something is clearly wrong. Any ideas? Thanks, Jeroen ___ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user ___ Neo4j mailing list
Re: [Neo4j] Wrong Gremlin results through REST interface
Jeroen, could you try to use the alternative syntax: ... groupCount(m) { it : it += 0.1 } ... It seems to be a problem with evaluation of the string in the javax.ScriptEngine for Groovy Here is the output from my web-console: • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m • == follows=11 • == owns=48 • gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it : it += 0.1 } -1;m • == follows=1.1 • == owns=4.8 Michael Am 07.11.2011 um 12:55 schrieb Jeroen van Dijk: Ok i think I found an example that is independent of my data (adapted from http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html) Locally: gremlin m = [:];g.v(33).bothE().label.groupCount(m) -1;m ==follows=11 ==owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m ==follows=1.1 ==owns=4.8 REST/webadmin console: gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 0.1 } -1;m == follows=11 == owns=48 gremlin m = [:];g.v(33).bothE().label.groupCount(m) { it }{ it += 10 } -1;m == follows=11 == owns=48 gremlin It seems like the closure block is not evaluated (to me as a Groovy/Gremlin/Neo4j noob) Michael, I will send you a link to my database in private. Thanks, Jeroen On Mon, Nov 7, 2011 at 12:41 PM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, that would indeed help a lot. I'll find it. Michael Am 07.11.2011 um 12:34 schrieb Jeroen van Dijk: Hi Michael, I would like to provide a better example, but my Groovy is quite poor so it I'll take me some time. However I think the problem isn't in the JSON conversion. Because that would mean the results I get would be the same, but with a different score right? The thing is that I get different Vertices back through the REST interface than I do locally. To me that means things already fail during the Gremlin evaluation. I will try to come up with a more isolated example. If it helps I could give you access to my dataset on Heroku (or through a Zip file). thanks, Jeroen On Mon, Nov 7, 2011 at 11:34 AM, Michael Hunger michael.hun...@neotechnology.com wrote: Jeroen, can you narrow it down to a simpler operation, like just a division? Perhaps in the conversion from the division result (be it Float, Double, BigDecimal) to JSON something goes awry. In the GremlinPlugin the code for that is: } else if (result instanceof Double || result instanceof Float) { return ValueRepresentation.number(((Number) result).doubleValue()); } I'm not sure what datatype groovy creates as result of your operation, perhaps you can determine that as well. If we have a simple gremlin / groovy calculation that yields the wrong results, we can easily inspect and fix the plugin. Thanks a lot Michael Am 07.11.2011 um 11:12 schrieb Jeroen van Dijk: Hi all, I'm using Gremlin to perform a recommendation query. Locally in the gremlin shell I get amazingly useful results. However when I use the webadmin gremlin console I get different results, both locally and in the Heroku addon environment. I get the same wrong results when I use the rest interface, so I assume something is incorrect in the Gremlin REST interface. In all these cases the data is the same or on the same database. The gremlin query is below (it is own of my first so probably not the most efficient). It returns the top 10 list of most similar items according to the Jaccard similarity index (= (Intersection(A, B) / Union(A, B) ): node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] When I do the following locally everything is fine: gremlin g = new Neo4jGraph('/usr/local/Cellar/neo4j/community-1.4/libexec/data/graph.db') ==neo4jgraph[EmbeddedGraphDatabase [/usr/local/Cellar/neo4j/community-1.4/libexec/data/graph.db]] gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] ==v[14260]=0.500013 ==v[12974]=0.1014492752 ==v[12349]=0.0952380952 ==v[12082]=0.083332 ==v[15434]=0.0810810810 ==v[11237]=0.0810810810 ==v[17672]=0.0769230768 ==v[18338]=0.0769230768 ==v[12852]=0.0769230768 ==v[11969]=0.075 gremlin However when I repeat this using the webadmin console interface I get the following results: gremlin node = g.v(14260); m = [:].withDefault{0.0}; a_total = node.inE().count(); node.in().out('owns').sideEffect{union = a_total + it.inE().count()}.groupCount(m) { it }{ it += (1/(union)) } -1; m.sort{a,b - b.value = a.value}[0..9] == v[14260]=31.0 == v[9204]=30.0