2013-08-23 3 views
0

Я использую 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, который представляет собой набор последовательных ребер, упорядоченных по времени появления.

ответ

0

Мое понимание вы пытаетесь получить все отношения типа «СЛЕДУЮЩИЙ» и с идентификатором, совпадающим в качестве исходного узла, если это верно, попробуйте следующий запрос,

START n=node:edge_iter(id='5') 
MATCH (m)-[r:NEXT]->(n) 
Where ID(r) = ID(n) 
Return r 
+0

Спасибо за ответ, но это не решение: в отн ссылка, на которую ссылается 'm.id', не связана с исходным узлом, поэтому я не могу использовать какой-либо классический обход здесь. Чтобы указать больше контекста, узлы, на которые ссылается индекс 'edge_iter', имеют свойство' id', которое ссылается на отношения где-то еще в графе. Два узла, на которые ссылается 'edge_iter', могут быть связаны отношением NEXT, потому что мне нужен итератор. Все, что мне нужно знать, это то, что можно использовать 'm.id' в качестве параметра вложенного запроса, что, похоже, не так. – Seb

+0

Знаете ли вы ожидаемый тип отношений заранее, или это может быть любой тип? –

+0

Запуск не принимает переменную как значение id. похоже, вы должны использовать совпадение, чтобы указать отношения. –

0

От Neo4j экипаж:

не в 2.0 он должен сделать прямой поиск от: где ид (г) = ид

Смежные вопросы