Вы можете использовать что-то вроде следующего запроса:
MATCH (p:Person)
WHERE p.name = $name AND p.city = $city AND p.school=$school
RETURN p {.name, .city, .school}
UNION
MATCH (p:Person)
WHERE p.name = $name OR p.city = $city OR p.school=$school
RETURN p {.name, .city, .school}
Где: $ name, $ city и $ school - это параметры, которые вы передадите, исходя из внешнего интерфейса. Кроме того, используя UNION между двумя операторами MATCH, вы получаете следующие преимущества:
- ваши дубликаты удаляются
- лучшие совпадения будут вашими первыми результатами, учитывая, что наилучшее совпадение является результатом встречи все 3 критерия: имя, город, школа
- запрос будет выполнен быстро, если у вас нет большого набора данных
- читаемый запрос с разделением 2 операторов MATCH.
Справочник по UNION: https://neo4j.com/docs/cypher-manual/current/clauses/union/#union -combine-query-remove-duplicates
Надеюсь, это поможет!