2015-02-20 2 views
0

Overlapping bidirectional relationshipЗапрос одного отношения с двунаправленной связи в Neo4j

Можно показать только одно направление отношения от двунаправленного отношения?

(п) - [: EMAIL_LINK] -> (м)

(п) < - [: EMAIL_LINK] - (м)

+2

Нет, в браузере вы не можете зарегистрироваться. Однако, если вы обновляетесь до 2.2M04, браузер лучше показывает их с изогнутыми краями. –

+0

Можно ли устранить избыточную связь между двумя узлами в наборе результатов cyper? Я имею в виду просто скрыть или не показывать в результирующем наборе. '14 -> 41, 41 -> 14, 62 -> 41, 62 -> 14' Как вы видите, узел (14) напрямую связан с узлом (41), то же самое с узел (41), который является непосредственно связанным узлом (14). Все, что я хочу показать, это уникальные отношения узлов в любых направлениях. '14 -> 41, 62 -> 41, 62 -> 14' или ' 41 -> 14, 62 -> 41, 62 -> 14' – Daryl

ответ

1

Если тип отношения в вопросе не имеет направленного семантики, лучше всего иметь их только один раз на графике и опускать направление во время запроса, то есть (a)-[:EMAIL_LINK]-(b) вместо (a)-[:EMAIL_LINK]->(b).

Чтобы избавиться от дублированных отношений в различных направлениях, использование:

MATCH (a)-[r1:EMAIL_LINK]->(b)<-[r2:EMAIL_LINK]-(a) 
WHERE ID(a)<ID(b) 
DELETE r2 

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

NB: WHERE ID(a)<ID(b) необходим. В противном случае a и b могут изменять роли во время последующей итерации. Следовательно, r1 и r2 также изменили бы роли, и оба они будут удалены.

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