Корень этого недоразумения в том, что WHERE не является отдельным предложением, оно изменяет предыдущее предложение MATCH, OPTIONAL MATCH или WITH.
Это поможет прочитать их как пару ...
MATCH ... WHERE ...
WITH ... WHERE ...
OPTIONAL MATCH ... WHERE ...
Поведение OPTIONAL MATCH заключается в том, что результаты не будут отфильтрованы. Вместо этого, если OPTIONAL MATCH терпит неудачу (и это включает результат его парного предложения WHERE), вновь введенные переменные в шаблоне OPTIONAL MATCH возвращаются как нуль.
Итак, с этой информацией вы можете видеть, что ваше предложение WHERE на самом деле не в том месте. Он связан с ДОПОЛНИТЕЛЬНЫМ МАТЧОМ, когда вместо этого следует следовать МАТЧУ, ограничивая эти результаты (и разрешая поиск по индексу, если у вас есть индекс: Post (ключ)).
Еще одно средство, которое вы можете использовать для исправления (менее корректно в данном конкретном случае, но полезно в других случаях), - это следовать ФАКУЛЬТАТИВНОМУ МАТЧУ с WITH ... WHERE ...
, что позволит предложению WHERE отфильтровывать результаты.
Подробнее об этом можно прочитать в одной из наших статей базы знаний Neo4j .