Я пытаюсь написать работу над cypher-запросом в браузере neo4j версии 3.1.4 (изменение версии невозможно). Мой опыт работы с зашифрованными запросами довольно низкий.
У меня есть запрос в следующих строках:
WITH SomeCollection
MATCH (x:xType)<- someRelationalMatchLogic which contains y as part of it // FIRST MATCH PART
WHERE (x.name = 'test') AND some logic on y
// SECOND MATCH PART
WITH x, y, SomeCollection
WHERE some additional post processing based on x and y value and collection values
RETURN x
Я хотел бы, чтобы следующий запрос MATCH был вставлен выше "// ЧАСТЬ ВТОРОГО ПОИСКА SECTION "
MATCH (x:xType)<- someDifferentReltionalMatchLogic which contains y as part of it
WHERE (x.name = 'test') AND some logic on y
Чтобы я мог получить результат совпадения соединения / объединения, прежде чем продолжить выполнение оставшейся части запроса.
В настоящее время мой единственный рабочий вариант - скопировать и вставить полный запрос и использовать Второй блок совпадений вместо первого в вставленном разделе и используйте UNION между 2.
Учитывая, что фактический запрос до и после MATCH довольно велик, это кажется очень грязным и неэффективным подходом.
Единственный другой подход, который я мог придумать на основе моих поисков, - это подзапрос CALL с использованием UNION - это подзапрос для 2 MATCH, как показано здесь https://neo4j.com/docs/cypher-manual/current/clauses/call-subquery/
Но по какой-то причине этот подход CALL дает ошибки в моей версии neo4j, я думал, что могу неправильно писать свой запрос, поэтому я напрямую использовал первый пример в ссылке, и даже это дало ошибку. Например, используйте d по ссылке:
UNWIND [0, 1, 2] AS x
CALL {
WITH x
RETURN x * 10 AS y
}
RETURN x, y
Ошибка (и):
mismatched input '{' expecting {HexLetter, CYPHER, EXPLAIN, PROFILE, USING, PERIODIC, COMMIT, UNION, ALL, CREATE, DROP, INDEX, ON, CONSTRAINT, ASSERT, IS, UNIQUE, EXISTS, LOAD, CSV, WITH, HEADERS, FROM, AS, FIELDTERMINATOR, OPTIONAL, MATCH, UNWIND, MERGE, SET, DETACH, DELETE, REMOVE, FOREACH, IN, DISTINCT, RETURN, ORDER, BY, L_SKIP, LIMIT, ASCENDING, ASC, DESCENDING, DESC, JOIN, SCAN, START, NODE, RELATIONSHIP, REL, WHERE, SHORTESTPATH, ALLSHORTESTPATHS, OR, XOR, AND, NOT, STARTS, ENDS, CONTAINS, NULL, COUNT, FILTER, EXTRACT, ANY, NONE, SINGLE, TRUE, FALSE, REDUCE, CASE, ELSE, END, WHEN, THEN, CALL, YIELD, KEY, UnescapedSymbolicName, EscapedSymbolicName}
AND
extraneous input 'x' expecting {';', '(', UNION, CREATE, LOAD, WITH, OPTIONAL, MATCH, UNWIND, MERGE, SET, DETACH, DELETE, REMOVE, FOREACH, RETURN, START, CALL, YIELD, SP}
введите описание изображения здесь
Мы будем очень признательны за любые входные данные для устранения этой ошибки CALL и / или помощи в достижении объединения x и y выходных данных этих 2 блоков MATCH в этом разделе запроса, прежде чем продолжить рассмотрение любых альтернативных предложений.