#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