Получить список общих друзей между более чем 2 пользователями в базе данных графа

Я работаю с базой данных графов Titan (v1.0) и ищу запрос gremlin, чтобы найти общих друзей между более чем 2 пользователями. Предположим, у меня есть "user1", "user2" и "user3". Я хочу найти общих друзей между этими 3 пользователями. Я знаю, что следующий запрос даст мне общих друзей между "user1" и "user2", но как мне найти общих друзей между более чем 2 пользователями? Я знаю, что для двух пользователей я могу использовать следующий запрос:

g.V(user1).both("friend").where(both("friend").is(eq(user2)))

А как насчет более 2 пользователей? Я знаю, что могу сделать то же самое со всеми парами, но это не эффективный запрос!

1 ответ

match() Шаг, вероятно, будет вашим лучшим выбором, так как его легче всего читать и писать. Может быть, не самый быстрый, хотя.

g.V().has("name","user1").as("u1").
  V().has("name","user2").as("u2").
  V().has("name","user3").as("u3").
  match(
    __.as("u1").both("friend").as("f"),
    __.as("u2").both("friend").as("f"),
    __.as("u3").both("friend").as("f")
  ).where("f", neq("u1").and(neq("u2")).and(neq("u3"))).select("f")

Вот запрос в действии: http://www.gremlinbin.com/bin/view/570a30f9a58c9

Альтернативно (без промежуточного обхода V()и без where() условия) вы могли бы сделать:

g.V().has("name","user1").both("friend").and(
    both("friend").has("name","user2"),
    both("friend").has("name","user3"))
Другие вопросы по тегам