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.5000000013 > ==>v[12974]=0.1014492752 > ==>v[12349]=0.0952380952 > ==>v[12082]=0.0833333332 > ==>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