The shortestPath: shortestPath( (ea)<-[:maps_to*]-(eb) )

before:
+VarLengthExpand(All) |   128 | 669618290 | 1494585385 | | 
(ea)<-[:maps_to*]-(eb)

after:
| +ShortestPath         |       28884702 |       678 |  169955 |
| +CartesianProduct  |       28884702 | 169955 |            0 |  

Since I have a lot of duplicate paths I assume the shortest path only 
traverses a path once giving me a distinct path. Before I would traverse 
all different path combinations (some of them multiple times) and then 
filter them out with a distinct. 

I think I misunderstood what the shortest path algorithm does. 

On Tuesday, 17 January 2017 14:47:55 UTC+1, Michael Hunger wrote:
>
> Which one did the change and would you be able to share the query plan for 
> that fast query with us?
>
> Michael
>
> On Tue, Jan 17, 2017 at 10:46 AM, <tomasz....@closeit.cz <javascript:>> 
> wrote:
>
>> Did the change and the time went down to 20 seconds!
>>
>> Incredible. 
>>
>> Thanks for the hint!
>>
>>
>> On Tuesday, 17 January 2017 07:59:52 UTC+1, tomasz....@closeit.cz wrote:
>>>
>>> Yes, there are indexes.
>>>
>>> I was wondering about the shortest path but I need all the paths that 
>>> end at specific nodes, usually they will not be the shortests. I will try 
>>> to see if the results are the same with this modification.
>>>
>>> On Tuesday, 17 January 2017 03:31:59 UTC+1, Michael Hunger wrote:
>>>>
>>>> I presume you have an index / constraint on nodeType1.fullname  AND 
>>>> nodeType1.name?!
>>>>
>>>> not sure why you do the pattern match first and only then the property 
>>>> lookup.
>>>>
>>>> What version are you using? in Neo4j 3.1 for the query below you should 
>>>> see much better performance:
>>>>
>>>> match (ea:nodeType1 {name:"something1"})<-[:maps_to*]-(eb:nodeType1) 
>>>> where eb.fullname starts with "something"
>>>> with distinct ea, eb 
>>>> return ea.name <http://el.name/>, eb.name <http://et.name/>;
>>>>
>>>> I would also think that shortest-path is much more sensible here:
>>>>
>>>> match (ea:nodeType1 {name:"something1"})
>>>> match (eb:nodeType1)  where eb.fullname starts with "something"
>>>> match shortestPath( (ea)<-[:maps_to*]-(eb) )
>>>> with distinct ea, eb 
>>>> return ea.name <http://el.name/>, eb.name <http://et.name/>;
>>>>
>>>> On Mon, Jan 16, 2017 at 9:19 PM, <tomasz....@closeit.cz> wrote:
>>>>
>>>>> Hi, I have a very expensive query that I'm trying to figure out how to 
>>>>> optimise.
>>>>>
>>>>> match (ea:nodeType1 {name:"something1"})<-[:maps_to*]-(eb:nodeType1) 
>>>>> with distinct ea, eb match (eb) where eb.fullname starts with 
>>>>> "something" return ea.name <http://el.name/>, eb.name 
>>>>> <http://et.name/>;
>>>>>
>>>>> I've used the profiler and as expected the expand all is the most 
>>>>> expensive part of the operation
>>>>>
>>>>> +Filter                            |   128 | 334812480 |   669618290 | 
>>>>> |
>>>>> +VarLengthExpand(All) |   128 | 669618290 | 1494585385 | | 
>>>>> (ea)<-[:maps_to*]-(eb)  
>>>>>
>>>>>                                                                           
>>>>>                              
>>>>> I've used the profiler and brought down the running time from 3 hours 
>>>>> to 2,15. I then tried the enterprise version hoping that the query would 
>>>>> use the available processors but it used only one so I'm assuming that 
>>>>> cypher is not parallelizable. 
>>>>>
>>>>> Is there some quick win to speed up a distinct path query or do I have 
>>>>> to write my own using the java api?
>>>>>
>>>>> p.s: the query might not compile as I've tried to summarise the gist 
>>>>> of the issue. 
>>>>>
>>>>> -- 
>>>>> 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 neo4j+un...@googlegroups.com.
>>>>> 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 neo4j+un...@googlegroups.com <javascript:>.
>> 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 neo4j+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to