Hi,
Thanks for the tips, will see if I can change the client to use the new format.
Indeed, let me try isolate the problems with more simpler queries. I have built
a test case below, forgive me if I made it to complex.
Friend => HasPet => Pet => HasCareTaker => CareTaker
Friend => HasPet => Pet => HasCareTaker => CareTaker
Friend
Test Case Script Setup
props = [:];rootNode= g.addVertex(props);props["Name"] = "John";friendNode1 =
g.addVertex(props);myRelation = g.addEdge(rootNode, friendNode1,
'AllFriends');props["Name"] = "Jack";friendNode2 =
g.addVertex(props);myRelation = g.addEdge(rootNode, friendNode2,
'AllFriends');props["Name"] = "Jill";friendNode3 =
g.addVertex(props);myRelation = g.addEdge(rootNode, friendNode3,
'AllFriends');props["Name"] = "ScoobieDoo";petNode1 =
g.addVertex(props);myRelation = g.addEdge(friendNode1,
petNode1,'HasPet');props["Name"] = "Garfield";petNode2 =
g.addVertex(props);myRelation = g.addEdge(friendNode2,
petNode2,'HasPet');props["Name"] = "Bob";careTakerNode1 =
g.addVertex(props);myRelation = g.addEdge(petNode1,
careTakerNode1,'HasCareTaker');props["Name"] = "Harry";careTakerNode2 =
g.addVertex(props);myRelation = g.addEdge(petNode2,
careTakerNode2,'HasCareTaker')
Query - Works, but does not have Jill in the table.
rootNode.out('AllFriends').as('Friend').ifThenElse{it.out('HasPet').hasNext()}{it.out('HasPet')}{it}.as('Pet').out('HasCareTaker').as('CareTaker').table(new
Table()){it['Name']}{it['Name']}{it['Name']}.cap
Output
[[Friend:Jack, Pet:Garfield, CareTaker:Harry], [Friend:John, Pet:ScoobieDoo,
CareTaker:Bob]]
Attempted Query - Does not work - trying to get Jill (Notice I am trying to use
println)
rootNode.out('AllFriends').as('Friend').ifThenElse{it.out('HasPet').hasNext()}{it.out('HasPet')}{println
"${it} Unknown"}.as('Pet').out('HasCareTaker').as('CareTaker').table(new
Table()){it['Name']}{it['Name']}{it['Name']}.cap
Desired Output
[[Friend:Jack, Pet:Garfield, CareTaker:Harry], [Friend:John, Pet:ScoobieDoo,
CareTaker:Bob], [Friend:Jill, Pet:unknown, CareTaker:unknown]]]
If I can get this working, it means we can have allot more performance from
queries without doing separate queries if we have a powerful table projection
model, since I rely on the REST API, I feel the table projections is going to
be our core method of joining results in one call, so the idea of left/right
joins etc.
-----Original Message-----
From: [email protected] [mailto:[email protected]] On
Behalf Of Marko Rodriguez
Sent: Wednesday, 7 December 2011 7:07 PM
To: Neo4j user discussions
Cc: [email protected]
Subject: Re: [Neo4j] println and Table Projections
Hi,
Peter brings up a good point. Its hard for us to parse complex queries and see
where Exceptions are happening. If you can isolate the problem via a simpler
traversal, that would be best for us -- and our little baby brains.
Also, note the following syntax optimizations for your traversal:
1. outE[[label:'HOSTS']].inV ---> out('HOSTS')
2. Similarly, inE[[label:'X']].outV -> in('X')
Using out() and in() is much more efficient (faster) and more concise. Unless
you plan to reason on the properties of an edge, then there is no reason to use
outE.inV style syntax as out will do the full vertex-to-vertex jump for you.
HTH,
Marko.
http://markorodriguez.com
On Dec 7, 2011, at 1:00 AM, Peter Neubauer wrote:
> Mmh,
> I was thinking on how to return the contents of the output stream, I
> am not quite sure how to return that. What woudl be a good format for
> you?
>
> Also could you reduce this into a small testcase that I can work on?
>
> 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
>
> brew install neo4j && neo4j start
> heroku addons:add neo4j
>
>
>
> On Wed, Dec 7, 2011 at 8:10 AM, Romiko Derbynew
> <[email protected]> wrote:
>> Hi,
>>
>> I have this statement.
>> g.v('0').outE[[label:'HOSTS']].inV.filter{
>> it['Key'].equalsIgnoreCase('romikoagency')
>> }.inE[[label:'USER_BELONGS_TO']].outV.filter{
>> it['Username'].equalsIgnoreCase('romiko.derbynew')
>> }.ifThenElse{it.outE[[label:'USER_LINKED_TO_CENTRE']].inV.hasNext()}{
>> it.outE[[label:'USER_LINKED_TO_CENTRE']].inV.Name}{println ${it}
>> "Unknown"}.as('Centre')
>>
>> I then take this query and do a table projection, however I get the
>> following error.
>> println java.lang.String cannot be cast to
>> com.tinkerpop.blueprints.pgm.Vertex
>>
>> Is there a better way to do this then? I want to reduce our calls to the DB
>> for performance and finding it a bit tough wrapping everything into one
>> query. Currently the above query is split into two different queries.
>>
>> Much appreciated.
>> _______________________________________________
>> 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
_______________________________________________
NOTICE: THIS MAILING LIST IS BEING SWITCHED TO GOOGLE GROUPS, please register
and consider posting at https://groups.google.com/forum/#!forum/neo4j
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user