Этого, как правило, следует избегать, но будет работать следующее:
MATCH (e :Event {id: $eventid}), (a {id: $anchorvalue)
WHERE $Anchor IN LABELS(a)
MERGE(e)-[r]-(a)
WHERE $RelationShip IN LABELS(r)
RETURN r
РЕДАКТИРОВАТЬ: Чтобы увидеть, почему это плохо, выполните следующие два запроса:
PROFILE
MATCH (e :Event)
RETURN e
И
PROFILE
MATCH (e)
WHERE "Event" IN LABELS(e)
RETURN e
Обратите внимание, что они на самом деле возвращают одно и то же, но делают это по-разному.
Первый запускает NodeByLabelScan
, который быстро просматривает все узлы с меткой «Событие».Из-за того, как Neo4j хранит эти данные, эти узлы «хранятся вместе» и очень быстро ищут.
Второй запрос выполняется AllNodesScan
, а затем Filter
.Таким образом, каждый отдельный узел в базе данных должен быть проверен, чтобы увидеть, имеет ли он «Событие» в качестве метки.
В общем, если вы используете метку в качестве переменной, вы не выбрали оченьхорошая структура для ваших данных.