Как вычислить общих друзей с помощью neo4j?

#java #database #graph #neo4j

#java #База данных #График #neo4j

Вопрос:

Я хочу использовать neo4j для управления отношениями между пользователями.

Как я могу получить общих друзей, используя это?

Ответ №1:

Самым простым способом было бы использовать алгоритм кратчайшего пути длиной 2 для двух пользователей в отношениях FRIEND_OF. Это пути, которые соединяют двух пользователей ровно через один переход в друзья.

 PathFinder<Path> finder = GraphAlgoFactory.shortestPath(
        Traversal.expanderForTypes( FRIEND_OF ), 2 );
Iterable<Path> paths = finder.findAllPaths( user1, user2 );
  

Ответ №2:

В случае использования cypher следующий запрос возвращает общих друзей:

 start a = node(1), b = node(4) match (a)--(x)--(b) return x;
  

Приведенный выше пример возвращает общих друзей узлов 1 и 4

введите описание изображения здесь

Ниже приведена копия запросов и их результатов для примера с картинки:

 neo4j-sh (0)$ start a = node(1), b = node(4) match (a)--(x)--(b) return x;
==>  -------------------- 
==> | x                  |
==>  -------------------- 
==> | Node[3]{Name->"C"} |
==>  -------------------- 
==> 1 row
==> 9 ms
==> 
neo4j-sh (0)$ start a = node(1), b = node(6) match (a)--(x)--(b) return x;
==>  -------------------- 
==> | x                  |
==>  -------------------- 
==> | Node[5]{Name->"E"} |
==> | Node[2]{Name->"B"} |
==>  -------------------- 
==> 2 rows
==> 0 ms
  

Комментарии:

1. в случае, если мы не знаем b узел в начале, мы можем использовать START a=node(1) MATCH a--x--b WHERE a--b RETURN x