I tried to put it together but have no realistic data to model it in a graph gist. Would be fun to load actual train stations, routes and reseverations with LOAD CSV into a graphgist though.
http://gist.neo4j.org/?dropbox-14493611%2Ftrain-stops_reseverations.txt Hope it helps Michael On Tue, Sep 16, 2014 at 10:35 PM, Michael Hunger < [email protected]> wrote: > Hi Sebastian, > > I'm not sure I understand your model. > > The relationships between stations are one seat of segments of the same > train-trip ? > > I wonder why you didn't model the train with it's wagons and seats as > nodes and then connect the seat nodes with a RESERVED_FROM releationship to > the stations from which it is reseved? > > and the :Train also being connected to a :Trip or :Route which has a > start-time at the first station and connections between the stations as > :Stop > > (:Train {trainNo})<-[:IN_TRAIN]-(:Wagon {wagonNo})<-[:IN_WAGON]-(:Seat > {seatNo})-[:RESERVED_FROM]->(:Stop) > > then you should be able to find all :Seats which have no :RESERVED_FROM > relationship between the stations that you look at > > or probably just subtract those with a RESERVED_FROM relationship from all > seats in your train. > > REGARDING YOUR MODEL: > > Did you look into allShortestPaths for your path search? An unlimited path > search explodes the numbers of paths looked at > and your WITH statement in between you inhibit the planner to pull in your > conditions into the path matching. > > match p=(d:Station {name: > 'Berlin-stop-01'})-[r1:train]->()-[r:train*]->(a:Station > {name: 'Berlin-stop-07'}) > WHERE r1.reserved = false AND all(r2 in r WHERE r2.reseved = false and > r2.seat = r1.seat and r2.trainnumber = r1.trainnumber) > > perhaps it even makes sense to split up the match. > > On Tue, Sep 16, 2014 at 10:01 PM, Sebastian Hennebrueder < > [email protected]> wrote: > >> Hi all. >> >> My data presents seats in trains, which can be booked. I am struggling to >> get a search for a bookable seat reasonable fast. >> >> Data sample: >> >> create (source:Station {name: 'Berlin-stop-01'}), (target:Station {name: >> 'Berlin-stop-02'}), (source)-[:train {trainnumber: "abc", seat: "1", >> reserved: false}]->(target) >> >> I am using the following data scenario: >> >> 50 stops, 50 seats, 10 different train numbers >> >> For every seat and train number there is a relation between two stations. >> >> The query I use is: >> >> match p=(d:Station {name: 'Berlin-stop-01'})-[r:train*]->(a:Station >> {name: 'Berlin-stop-07'}) >> with head(relationships(p)) as r1,p where r1.reserved = false and all(r2 >> in relationships(p) where r2.seat=r1. seat and r2.trainnumber = >> r1. trainnumber) >> return r1 as `r` limit 1 >> >> With longer distances between the stops, the database becomes >> unresponsive. I tried to use start to fix the destination and arrival but >> did not get any major improvements. >> >> I would appreciate any help. >> >> Best Regards >> >> Sebastian >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Neo4j" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
