Получить список общих друзей между более чем 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"))