Создать новые отношения из существующего графа - PullRequest
0 голосов
/ 12 июня 2019

Целью этого запроса является создание новых отношений из существующего графа.У меня есть Category узлы, связанные SUBCAT_OF отношениями.Я хочу извлечь SUBCAT_OF пути из каждого Category (до длины 4) и использовать их для создания новых путей, состоящих из NEW_SUBCAT отношений.

Я использую следующий запрос, но я 'я не уверен, что он работает правильно:

MATCH (start:Category)
WHERE ()-[:SUBJECT]->(start)
MATCH path =((start)-[:SUBCAT_OF*1..4]-> (p1:Category))
UNWIND RELATIONSHIPS(path) AS rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)

1 Ответ

0 голосов
/ 12 июня 2019

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

Ваш запрос (немного ниже) был выполнен так, как вы хотите.

MATCH (start:Category)
WHERE ()-[:SUBJECT]->(start)
MATCH path = (start)-[:SUBCAT_OF*..4]->(:Category)
UNWIND RELATIONSHIPS(path) AS rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)

Примечание. Этот запросгарантирует, что между каждой отдельной парой start и end узлов будет существовать только одна NEW_SUBCAT связь (даже если ваша БД имела несколько SUBCAT_OF взаимосвязей между этой же парой).


Следующий альтернативный запрос может быть немного быстрее, так как он сначала отфильтрует дублирующиеся отношения (генерируемые шаблоном отношение переменной длины ):

MATCH (start:Category)
WHERE ()-[:SUBJECT]->(start)
MATCH path = (start)-[:SUBCAT_OF*..4]->(:Category)
UNWIND RELATIONSHIPS(path) AS rel
WITH DISTINCT rel
WITH STARTNODE(rel) AS s, ENDNODE(rel) AS e
MERGE (s)-[:NEW_SUBCAT]->(e)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...