Hi
We currently have many rather lengthy, complex Cypher queries running on 2.1.x. I wanted to see the potential performance improvements in 2.2's Cypher query planner, so I imported our DB to 2.2 and ran the queries on it.
However, I immediately noticed that I was only getting a subset of the results I'd gotten on 2.1.x, and in some cases no results. After some investigation, it turns out it has to do with different behaviour (and syntax) of shortestPath in 2.2.
The offending lines in the query are:
match objectives-[:target_region]->regions, oregions<-[:target_region]-oobjectives
match path=shortestPath(regions-[:has_child*..4]-oregions)
Regions are a simple parent > child hierarchy, where a parent region is linked to their child nodes (also regions) via a [:has_child] relationship. objectives and oobjectives are identified and matched earlier in the query. The basic premise is to find objectives belonging to two different companies which target either the same regions, or regions that are connected by virtue of being ancestors / descendants of each other.
In 2.1.x, this returns 4 results for this particular set of criteria. Two are direct region matches (Brazil and Australia match each other directly on both sides) and two are descendants (Australia matches two objectives in New South Whales)
In 2.2, it returns only two - the descendants results (Australia <-> NSW)
After some hair pulling, I wondered if perhaps the reason 2.2 wasn't finding the direct matches was that *..4 didn't specify a minimum length. This turned out to be the case, as replacing the relevant line with:
match path=shortestPath(regions-[:has_child*0..4]-oregions)
produces the same results as 2.1.x.
I thought great, so this is how 2.2 does it, let me back-port it into the app so the switchover will be easier when 2.2 is released. However, attempting to replace this line in 2.1.x gives me this error:
"shortestPath(...) does not support a minimal length"
So my question is - is this intended? Did I miss some release notes with breaking changes for 2.2?
Many thanks