Я использую Neo4j 1.9.2 и мне нужно оптимизировать следующий запрос:Neo4j высчитывать: внутренний результат используется как идентификатор во вложенном запросе
START n=node:edge_iter(id='5'), r=relationship(*) MATCH (m)-[:NEXT]->(n) WHERE ID(r) = m.id RETURN r
Это смертельно медленно из-за relationship(*)
.
Таким образом я создать этот запрос, который не работает: сообщение
START n=node:edge_iter(id='5') MATCH (m)-[:NEXT]->(n) WITH m.id as id START r=relationship(id) RETURN r
Ошибка:
ожидается отношения ID, или *
«СТАРТ г = отношения (id) "
Я получаю еще одну ошибку, когда использую r=relationship({id})
, потому что {id}
должен быть параметром.
Мой вопрос прост: как я могу использовать m.id
, чтобы получить соответствующую строку без второго запроса?
Немного контекста: Я пытаюсь смоделировать краевой поток в Neo4j, который представляет собой набор последовательных ребер, упорядоченных по времени появления.
Спасибо за ответ, но это не решение: в отн ссылка, на которую ссылается 'm.id', не связана с исходным узлом, поэтому я не могу использовать какой-либо классический обход здесь. Чтобы указать больше контекста, узлы, на которые ссылается индекс 'edge_iter', имеют свойство' id', которое ссылается на отношения где-то еще в графе. Два узла, на которые ссылается 'edge_iter', могут быть связаны отношением NEXT, потому что мне нужен итератор. Все, что мне нужно знать, это то, что можно использовать 'm.id' в качестве параметра вложенного запроса, что, похоже, не так. – Seb
Знаете ли вы ожидаемый тип отношений заранее, или это может быть любой тип? –
Запуск не принимает переменную как значение id. похоже, вы должны использовать совпадение, чтобы указать отношения. –