Как я могу применить новый Cypher по результатам предыдущего Cypher - PullRequest
0 голосов
/ 14 сентября 2018

Я ищу одну или несколько сущностей в neo4j, использующих шифр для рисования графика на экране, к которому конечный пользователь сам решит, какой алгоритм он хочет применить.То есть я хочу применить алгоритмы к полученному ранее результату.

Например: у меня есть этот запрос:

MATCH (e)<-[r]->(a) 
WHERE id(e) IN [9336,9306,9352,5215,9354] 
RETURN e,r,a

Это возвращает результат, на котором я могу нарисовать графикэкран.Но теперь мне нужно применить алгоритм к предыдущему графику, чтобы сохранить результат, но теперь я добавляю степень центральности каждого узла в графике.

Например, я хочу применить это:

CALL algo.pageRank.stream('', '', {iterations:20, dampingFactor:0.85, concurrency:4}) YIELD nodeId, score

Но по сравнению с предыдущим результатом.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 18 сентября 2018

В Neo4j нет способа передать результаты шифра, который вернулся непосредственно в начало другого запроса, но есть несколько вещей, которые вы можете сделать.

Повторите предыдущий запрос, заменив RETURN на WITH

Итак, в вашем примере запустите

MATCH (e)<-[r]->(a) 
WHERE id(e) IN [9336,9306,9352,5215,9354] 
RETURN e,r,a

с последующим

MATCH (e)<-[r]->(a) 
WHERE id(e) IN [9336,9306,9352,5215,9354] 
WITH e,r,a
CALL algo.pageRank.stream('', '', {iterations:20, dampingFactor:0.85, concurrency:4}) YIELD nodeId, score
RETURN e,r,a, nodeId, score

Это имеет побочный эффект, однако, если результаты предыдущего запроса изменятся (поскольку узлы, где были добавлены / удалены, результаты будут обновлены, чтобы отразить более новые данные. (Может быть хорошим или плохим в зависимости от вашей перспективы)

Сопоставить результаты последнего запроса для начала следующего запроса

Я бы не рекомендовал это. Это будет болезненно реализовать, но это возможно.

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