Нахождение наиболее похожих узлов по их общим дочерним узлам - PullRequest
0 голосов
/ 15 мая 2018

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

Например, у меня есть:

N1-[has]->A
N1-[has]->B
N1-[has]->C
N1-[has]->D

N2-[has]->A
N2-[has]->B
N2-[has]->E
N2-[has]->F

N3-[has]->A
N3-[has]->B
N3-[has]->C
N3-[has]->G

Итак, я хочу проверить, какой узел по своим дочерним узлам наиболее похож на N1.Это должно быть N3, потому что они имеют 3 дочерних узла

Теперь я могу определить, какой это узел, используя

match (n1:Node {name: "some name"})-[:HAS]->(i)<-[:HAS]-(n2:Node) 
with n2.name as n, count(*) as c 
return n order by c desc limit 1

Но мне нужен список узлов, которые они разделяют, я сиделна это уже довольно давно и не могу обойтись.

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете попробовать использовать collect () , чтобы сохранить похожие узлы в коллекции и затем вернуть ее:

match (n1:Node {name: "some name"})-[:HAS]->(i)<-[:HAS]-(n2:Node) 
with n2.name as n, collect(i) as similarNodes, count(*) as c 
return n, similarNodes
order by c desc limit 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...