Повторите запрос neo4j cypher, пока есть строки - PullRequest
0 голосов
/ 04 ноября 2018

Запрос, приведенный ниже, работает, и я хочу, чтобы запрос выполнялся повторно до тех пор, пока он дает результаты. В конце концов, поскольку я устанавливаю обработанное свойство в 1 на b: MAINS_CS для каждой итерации, запрос будет возвращать ноль записей. Меня интересуют все записи, возвращаемые по всем запросам.

Я пытался использовать отношения переменной длины, но тогда кажется, что запрос выполняется очень медленно.

Есть ли какой-нибудь способ добиться этого в cypher без необходимости каждый раз вручную выполнять запрос? Я пытаюсь добиться этого в браузере Neo4j.

MATCH (a:MAINS_CS)-[:Connects]-(joint:MAINS_JOINT)-[:Connects]-(b:MAINS_CS {cs_source_way_id:a.cs_source_way_id})
WHERE a.cs_source_way_id > 0 AND a.processed = 1 AND b.processed <> 1
SET b.processed = 1
RETURN
  a.node_number as parent_spid,
  b.node_number as child_spid,
  joint.node_type as joint_type

1 Ответ

0 голосов
/ 04 ноября 2018

Идея

Взгляните на повторяющееся выполнение Cypher:

CALL apoc.periodic.COMMIT('<place your query here>', {limit: 10000});

Объяснение

"Специально для обработки графиков полезно многократно выполнять запрос в отдельных транзакциях, пока он не обрабатывает и не генерирует какие-либо результатов больше. Таким образом, вы можете перебирать партии по элементам, которые не выполняйте условия и обновляйте их, чтобы они выполнялись впоследствии.

Запрос выполняется неоднократно в отдельных транзакциях, пока возвращает 0. "

(взято из Индекс процедуры Neo4j APOC на GitHub )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...