While I don't know memgraph or their particular implementation of openCypher, I might at least be able to give some potential insight regarding:
that an exists() can only take one relationship (which I thought I'd comply with)
I believe that the WHERE
part in
exists((c) <-[:contains]- (center) WHERE center.name CONTAINS "special")
might be the issue, as that is something more than just a relationship.
This is based on my experience with Neo4j and their Cypher though so it might differ from memgraph, but it would be my guess at least.
As a though experiment: would it be possible to calculate all the values or at least conditions separately to the SET, to split the SET and exists call? for example calculate something in one WITH clause and use that in the SET afterwards