Как рассчитать общих друзей с neo4j? - PullRequest
2 голосов
/ 13 июня 2011

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

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

Ответы [ 2 ]

4 голосов
/ 19 июня 2012

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

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

В примере выше возвращаются общие друзья узла 1 и 4

enter image description here

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

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
4 голосов
/ 13 июня 2011

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

PathFinder<Path> finder = GraphAlgoFactory.shortestPath(
        Traversal.expanderForTypes( FRIEND_OF ), 2 );
Iterable<Path> paths = finder.findAllPaths( user1, user2 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...