Neo4j: найти сеть узлов типа A, подключенных к более чем одному типу 2 - PullRequest
0 голосов
/ 30 октября 2018

Моя сеть состоит из групп узлов типа A, которые имеют множественные отношения между ними (разных типов, но не важно ftm). Некоторые из этих узлов также могут иметь отношение с узлом типа B. Сейчас я ищу группы узлов типа A, которые связаны более чем с одним из типа B. Это возможно даже с Neo4j?

1 Ответ

0 голосов
/ 30 октября 2018

Пример модели

Для простоты возможных дальнейших ответов и решений отмечу мое утверждение создания графа:

CREATE
  (a1:TypeA {name: 'A1'})-[:REFERS]->(a2:TypeA {name: 'A2'}),
  (a1)-[:REFERS]->(a3:TypeA {name: 'A3'}),
  (a2)-[:REFERS]->(a4:TypeA {name: 'A4'}),
  (a3)-[:REFERS]->(a4),
  (c1:TypeC {name: 'C1'})-[:REFERS]->(a1),
  (c1)-[:REFERS]->(a2),
  (d1:TypeD {name: 'D1'})-[:REFERS]->(a1),
  (d1)-[:REFERS]->(a3),
  (b1:TypeB {name: 'B1'})-[:REFERS]->(a3),
  (b1)-[:REFERS]->(a4),
  (b2:TypeB {name: 'B2'})-[:REFERS]->(a4),
  (e1:TypeE {name: 'E1'})-[:REFERS]->(a3),
  (e1)-[:REFERS]->(b1);

graphical representation of the example graph

Решение

Вторая строка определяет вашу TypeA сеть. На основании этого третья строка идентифицирует все подключенные TypeB s, которые подсчитываются в строке 5 и фильтруются в строке 6.

MATCH
  networkA = (startNode:TypeA)-[:REFERS]-(:TypeA)-[:REFERS]-(:TypeA)-[:REFERS]-(:TypeA)-[:REFERS]-(:TypeA),
  (startNode)-[:REFERS]-(nodeB:TypeB)
WITH
  nodes( networkA) AS networkANodes, count(nodeB) AS nodeBAmount
WITH networkANodes WHERE nodeBAmount >= 2
RETURN
  networkANodes;

Результат

╒══════════════════════════════════════════════════════════════════════╕
│"networkANodes"                                                       │
╞══════════════════════════════════════════════════════════════════════╡
│[{"name":"A4"},{"name":"A3"},{"name":"A1"},{"name":"A2"},{"name":"A4"}│
│]                                                                     │
├──────────────────────────────────────────────────────────────────────┤
│[{"name":"A4"},{"name":"A2"},{"name":"A1"},{"name":"A3"},{"name":"A4"}│
│]                                                                     │
└──────────────────────────────────────────────────────────────────────┘

graphical representation of the result

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